Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Visual C++ /MFC/Запись и воспроизведение звука


Автор: novic 2.3.2007, 14:04
Объясните, пожалуйста, как написать программу записи и вспроизведения звука в Windows на языке C++ в среде Microsoft Visual C++. 

Автор: Greeen 2.3.2007, 23:32
В раздел работа

Автор: FelikZ 16.3.2007, 00:41
Читай про waveOut и waveIn...

Автор: SergMilk 11.8.2009, 21:55
Привет!
А подскажите, пожалуйста, как создавать wav файл для проигрывания через звуковую карту в процессе работы приложения? Например, в зависимости от выбора пользователя. Что-нибудь вроде Beep(int frequancy,int duration); ?

Спасибо!

Автор: GavriKos 13.8.2009, 13:06
Для работы с wav файлами есть специальная библиотека в поставке студии. Вот название скажу когда студи будет под рукой. С ее помощью можно работать с аудио. Но загрузку, запись и прочее прийдется делать руками. Т.е. писать либо в одну переменную, либо в вектор (чтобы можно было воспроизвести кусок) и т.д. Библиотека только позволяет работать с аудио входом-выходом и системным микшером, но не оперирует аудиоданными - это остается з аплечами програмиста. 


Цитата

Что-нибудь вроде Beep(int frequancy,int duration);


По моему MessageBeep.

Автор: SergMilk 16.8.2009, 17:01
То есть если я хочу допустим проигрывать точку и тире из азбуки Морзе, то мне надо создать два wav файла - один для точки, другой для тире(ну или только для точки, а тире как утроенную точку проигрывать). А для реализации возможности выбирать частоту  (ноту) на которой будет воспроизведение, таких wav файлов нужно несколько, так??

Автор: andrew_121 16.8.2009, 22:52
http://ru.wikipedia.org/wiki/Beep

Автор: SergMilk 18.8.2009, 23:25
Не, мне нужно не через спикер, а через звуковую плату проигрывать

Автор: ThrashTillDeath 11.2.2010, 21:17
библиотека вроде бы  mmsystem.h
    и там уже  описываешь  свойства wav:
     
Код

    WaveFormat.wFormatTag=...
    WaveFormat.nChannels=...
    WaveFormat.nSamplesPerSec=...
    WaveFormat.nAvgBytesPerSec=...
    WaveFormat.nBlockAlign=...
    WaveFormat.wBitsPerSample=...

далее описываешь свой буфер:
Код

    ULONG Buffersize=WaveFormat.nBlockAlign*WaveFormat.nSamplesPerSec*50;//задаешь нужное тебе время(сек), но желательно его сделать маленьким, потом просто докидывать буфера при помощи waveInAddBuffer(WaveIn, &WaveHdr, sizeof(WAVEHDR));
    WaveHdr.lpData=(char*)malloc(Buffersize);
    WaveHdr.dwBufferLength=Buffersize;
    waveInOpen(&WaveIn, 0, &WaveFormat, NULL, 0, CALLBACK_WINDOW);
    waveInPrepareHeader(WaveIn, &WaveHdr, sizeof(WAVEHDR));
    waveInAddBuffer(WaveIn, &WaveHdr, sizeof(WAVEHDR));
    waveInStart(WaveIn);


    

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)