Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
ExeiLj
9 / 9 / 1
Регистрация: 02.08.2012
Сообщений: 128
#1

Запись звука - C++

09.08.2012, 18:18. Просмотров 2277. Ответов 1
Метки нет (Все метки)

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

Накидал тут по статье (http://www.junglewin.narod.ru/sound.html):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    WAVEFORMATEX WaveFormat;
 
    WaveFormat.wFormatTag = WAVE_FORMAT_PCM;
    WaveFormat.nChannels = 1;
    WaveFormat.nSamplesPerSec = 16000L;
    WaveFormat.nBlockAlign = 2;
    WaveFormat.nAvgBytesPerSec = WaveFormat.nSamplesPerSec*WaveFormat.nBlockAlign;
    WaveFormat.wBitsPerSample = 16;
    WaveFormat.cbSize = 0;
 
    MMRESULT mmRes =
    waveInOpen(&hWaveIn, WAVE_MAPPER, &WaveFormat, NULL, 0L, CALLBACK_WINDOW);
 
    ULONG BufferSize = WaveFormat.nBlockAlign*WaveFormat.nSamplesPerSec*10;
    WaveHdr.lpData = (char*)malloc(BufferSize);
    WaveHdr.dwBufferLength = BufferSize;
 
    waveInPrepareHeader(hWaveIn, &WaveHdr, sizeof(WAVEHDR));
 
    waveInAddBuffer(hWaveIn, &WaveHdr, sizeof(WAVEHDR));
 
    waveInStart(hWaveIn);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    waveInReset(hWaveIn);
    waveInUnprepareHeader(hWaveIn, &WaveHdr, sizeof(WAVEHDR));
     //WaveHdr.lpData - указывают на буфер, где хранять записанные данные.
     //После вызова waveInUnprepareHeader ими можно распоряжаться
     //по собственному усмотрению
    free(WaveHdr.lpData);
    waveInClose(hWaveIn);
}
Но не понял, ни как воспроизвести (прям из буфера), ни как сохранить в файл.
Может кто делал себе такую штуку, знает как и чего тут изменить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2012, 18:18     Запись звука
Посмотрите здесь:

Запись звука в Windows - C++
Всем привет! Помогите разобраться с записью звука. Есть такой примерчик, добросовестно спёртый с msdn. const IID...

Запись звука в массив байтов - C++
Если в кратце, то... то мне нужно получить байты с микрофона и записать из в массив/байтов. Я уже облазал пол инета в поиска нужных...

Запись звука в определённых децибелах - C++
Здравствуйте! Требуется программа для подсчёта времени звучания скрипки. Подскажите, пожалуйста, каким оператором воспользоваться для...

Запись звука с микрофона в файл - C++
Подскажите с чего начать, нужно, чтобы программа записывала звук с начала того момента когда человек заговорит и до окончания, и потом...

Запись звука с помощью bass - C++
Всем привет Вопрос такой Как записать звук с помощью библиотеки bass? документация, прилагающаяся к нему мне непонятна из-за плохого...

Запись звука в массив и в файл wav - C++
Здравствуйте! Такой вопрос. Вот мне нужно записать звук по нажатию кнопки (пусть будет пробела) и занести записанное в массив по формату...

Нет вывода и неправильная запись (запись) - C++
Доброго времени суток! Есть программка записывающая студентов. При записи ФИО через пробел, происходит ошибка. При выводе...

Анализатор звука - C++
Собственно, как его организовать? Что-то порылся в гуглу, ничего не нашел. Может я неправильно выражаюсь, но я про "эквалайзер", который...

скорость звука - C++
подскажите пожалуйста с помощью чего можно создать регулятор скорости звука (азбука морзе)?

Генерация звука - C++
Помогите написать программу для генерации звука через системный динамик с определённой продолжительностю(НА Си).

Запустить воспроизведение звука - C++
C++. Допустим я хочу чтобы после вывода некоторых слов,у меня звучал звук. Вопрос:Как сделать так чтобы после cout<<"h";Был...

Передача звука, приём - C++
Доброго времени суток. Вот задумал создать, что то на подобии голосового чата, но вот нет навыков в данной сфере. Может, кто то уже...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
09.08.2012, 19:37     Запись звука #2
Вам нужно использовать какую-нибудь библиотеку для работы со звуком (DirectX, а именно DirectSound) или еще есть кроссплатфоременная OpenAL.
Если использовать DirectSound, то необходмы следующие функции:
DirectSoundCreate8
IDirectSound8::CreateSoundBuffer
IDirectSoundBuffer8::SetFormat

Добавлено через 22 минуты
еще есть функция waveOutOpen function
Я неуверен, но может так подойдет:
Код
// после waveInStart
HWAVEOUT hWaveOut;
if(waveOutOpen(&hWaveOut, WAVE_MAPPER, &WaveFormat, 0, 0, WAVE_FORMAT_DIRECT))
{
  MessageBoxA(NULL, "Failed to replay", NULL, MB_OK | MB_ICONEXCLAMATION );
};
waveOutWrite(hWaveOut, &WaveHdr, sizeof(WaveInHdr)); /
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru