PlaySound в C ++ Консольное приложение? - PullRequest
3 голосов
/ 01 апреля 2012

РЕДАКТИРУЕТСЯ, ПОЧЕМУ КОД ПРАВИЛЬНО (СПАСИБО ta.speot.is) - НОВЫЙ ВОПРОС ВНУТРИ

Итак, я играл с консолью на том же уровне, и нас попросилисделайте наш первый «проект» для оценки.У меня есть базовое приложение, все готово ... но я хотел немного его взбодрить и добавить несколько звуков.Звуки, которые играют в консоли.

Этот тест работает .. (вроде), поскольку он будет воспроизводить звуковой файл ... но у меня есть 2 проблемы ... 1, когда воспроизводится звук, приложение зависает, пока звук не будет завершен на 100% ... такжекогда я пытаюсь скомпилировать как «релиз», он выдает ошибки с «ошибкой компоновки» - фатальная ошибка LNK1120: 1 неразрешенная внешность.

#include <iostream>
#include <windows.h>
#include <mmsystem.h>
using namespace std;

int main(){
    //PlaySound(TEXT("mywavsound.wav"), NULL, SND_FILENAME); - My erroring code
    PlaySound(TEXT("mywavsound.wav"), NULL, SND_FILENAME | SND_ASYNC);// - the correct code

    int test = 0;
    cin>>test;
    return 0;
}

Итак, мои вопросы ...

  1. Как я могу воспроизводить звуки без зависания консоли, чтобы я мог, например, воспроизводить зацикленный музыкальный файл все время, покаПроект был открыт.Также было бы здорово, если бы я мог воспроизводить другие звуки поверх него ... поэтому, когда вы нажимаете, например, Enter, он воспроизводит звук без остановки музыки.
  2. Как добавить файл wavпоэтому он компилируется как релиз?

EDIT

Я знаю о вещи SND_ASYNC, но я не знаю, как ее использовать, я могуне шов, чтобы использовать это без вещи, не компилируемой .. доза у кого-нибудь есть пример кода, использующего SND_ASYNC?

РЕДАКТИРОВАТЬ 2

Так что у меня это работает сейчас.... используя

"PlaySound(TEXT("mysound.wav"), NULL, SND_FILENAME | SND_ASYNC);"

Теперь мне интересно, как я могу воспроизвести 1 или более звуков одновременно, так как если я дважды вызову PlaySound с этим флагом, он остановит 1-й и сыграет2 секунды .. Есть ли способ воспроизвести 2 звука одновременно?

Ответы [ 3 ]

4 голосов
/ 01 апреля 2012

Как я могу воспроизводить звуки без остановки консоли

Если вы Google для PlaySound , это первый результат :

fdwSound

...

SND_ASYNC Звук воспроизводится асинхронно, и PlaySound возвращается сразу после начала звука. Чтобы завершить асинхронно воспроизводимый звук формы сигнала, вызовите PlaySound с pszSound, установленным на NULL.

Вы должны ознакомиться с поисковыми системами и их возможностями.

Как добавить файл wav, чтобы он компилировался как релиз?

Вам необходимо связать winmm.lib в конфигурациях Release и Debug. Или добавьте

#pragma comment(lib, "winmm.lib")

в начало вашего исходного кода.

0 голосов
/ 15 мая 2017

вместо этого используйте функцию (mciSendstring) .. с ее помощью вы можете воспроизводить более 1 звука, и вы можете воспроизводить 2 звука друг над другом:)

Примеры:

mciSendString("play wave1.wav", NULL, 0, NULL);

mciSendString("play wave2.wav", NULL, 0, NULL);

для более подробной информации

0 голосов
/ 21 мая 2016

На большинство ваших вопросов ответили. Тем не менее, для воспроизведения большего количества звуков одновременно. Для этого вы можете сделать это с помощью SDL_Mixer. Пока я искал какой-нибудь хороший способ воспроизведения аудио, и чтобы он работал, я пришел к этому.

Хорошим моментом является то, что SDL_Mixer является мультиплатформенным (протестировано на обоих win, linux). Если вы знаете, что делаете, вы можете написать код, который компилируется в обеих ОС.

Еще одна хорошая вещь - вы можете воспроизводить несколько звуков одновременно (возможно, даже до 30, но проверьте это онлайн). Библиотека доступна для Windows (DLL и заголовочные файлы) и Linux (установка через консоль). Я не буду вдаваться в подробности по установке. Он поддерживает wav и oog и многие другие типы файлов.

Однако недостатки заключаются в следующем: После того, как все заработало, мне понадобилось много времени, и я понял, что звук хрустит и имеет низкое качество, хотя оригинальный файл хорошо воспроизводится в медиаплеере. После исследования я обнаружил, что это долгое время ошибка в библиотеке, и до сих пор не исправлена. Некоторые люди говорили, что исправили это, увеличив громкость до 100, но у меня это не сработало. Вторым недостатком является то, что ему нужно немного больше кодирования, чем просто набрать

 PlaySound(TEXT("mywavsound.wav"), NULL, SND_FILENAME | SND_ASYNC);// - the correct code

Следующий недостаток был обнаружен мной, и что wav-файл не загружается, говоря, что формат не правильный. Несмотря на то, что я использовал 3 конвертера и скачал много файлов через Интернет, это не сработало. Это сработало, однако, после загрузки тестового проекта и использования их файла .wav в архиве. Тем не менее, я решил это, преобразовав всю мою музыку в .oog

Так вот, я до сих пор не знаю, какую музыкальную библиотеку лучше всего использовать. Зависит от того, какой должна быть ваша консоль ...? ты пишешь игру или просто медиаплеер? или просто тестирую ...?

...