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

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

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

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

09.08.2012, 18:18. Просмотров 2376. Ответов 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);
}
Но не понял, ни как воспроизвести (прям из буфера), ни как сохранить в файл.
Может кто делал себе такую штуку, знает как и чего тут изменить?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2012, 18:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запись звука (C++):

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

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

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

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

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

Запись звука в массив и в файл wav - 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)); /
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2012, 19:37
Привет! Вот еще темы с ответами:

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

[Файлы] Запись-чтение-запись. Почему не прокатывает? - C++
Сначала записываю в файл "а" запись "makulatura", потом читаю ее в строку h. Все ок. Но потом когда открываю файл "a" опять для записи с...

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

Дана строка. Определить, представляет ли она собой запись целого числа или запись дробного числа - C++
Дана строка.Необходимо определить ,представляет ли она собой запись целого числа,записать дробного числа.Считайте ,что дробная часть...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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