Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 10

Звук с микрофона через WinAPI

03.06.2013, 22:53. Показов 2695. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

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


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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 int i; 
WAVEFORMATEX WaveFormat;
HWAVEIN hWaveIn;  
WAVEHDR * WaveHdr = new WAVEHDR[50];  
bool stop;
double LenBuf;
 
void __fastcall TMainForm::Button1Click(TObject *Sender)
{
 
WaveFormat.wFormatTag = WAVE_FORMAT_PCM;
WaveFormat.nChannels = 1;  
WaveFormat.nSamplesPerSec = 44100;   
WaveFormat.nAvgBytesPerSec = ( WaveFormat.nChannels * WaveFormat.nSamplesPerSec * 16 ) / 8;
WaveFormat.nBlockAlign = ( WaveFormat.nChannels * 16) / 8;
WaveFormat.wBitsPerSample = 16;     
WaveFormat.cbSize = 0;    
 
 
waveInOpen(&hWaveIn,WAVE_MAPPER, &WaveFormat,(DWORD)MainForm->Handle, NULL, CALLBACK_WINDOW);
 
  do
   {
     for (i = 0; i < 2; i++) {
 
// Заполняем заголовок блока:
    ULONG BufferSize = WaveFormat.nBlockAlign*WaveFormat.nSamplesPerSec*10;
    WaveHdr[i].lpData = (char*)malloc(BufferSize);
    WaveHdr[i].dwBufferLength = BufferSize;
    WaveHdr[i].dwFlags        = 0L;
    WaveHdr[i].dwLoops        = 0L;
    WaveHdr[i].dwUser         = 0L;
 
    BufferSize = LenBuf;
 
 
    waveInPrepareHeader(hWaveIn, &WaveHdr[i], sizeof(WAVEHDR)); // Подготавливаем блок для записи
    waveInAddBuffer(hWaveIn, &WaveHdr[i], sizeof(WAVEHDR));  // Передаем блок устройству записи
    waveInStart(hWaveIn);  // Запускаем запись
        waveInReset(hWaveIn);
        waveInUnprepareHeader(hWaveIn, &WaveHdr[i], sizeof(WAVEHDR));
 
 
         // операции с буфером
 
 
        free(WaveHdr[i].lpData); //освобождаем буферы
 
 
 
 
      } 
            }
 
       while (stop==false);
 
          waveInClose(hWaveIn); //закрываем устройство
 
 
    }    
 
void __fastcall TMainForm::ButtonOcenClick(TObject *Sender)
{
      stop = true;
      }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.06.2013, 22:53
Ответы с готовыми решениями:

Снимать звук с микрофона и воспроизводить звук из консоли
Гуру, подскажите, тяжело ли подобное? Накапливать в буферах, обрабатывать и воспроизводить...

Как записать звук с микрофона и воспроизвести его?
Подскажите как записать звук с микрофона (можно в wav файл но желательно в буфер) и воспроизвести...

Как захватить звук с микрофона?
Собственно интересует тема топика. Наверное делается это так: создаётся какой - то буфер и...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.06.2013, 22:53
Помогаю со студенческими работами здесь

Записать звук с микрофона в буфер
При выполнении pDSCBuffer1-&gt;Release() вылетает исключение (см. картинку) В чем проблема? ...

не воспроизводит звук winapi
здравствуйте. у меня такая проблема: подключаю библиотеки #include&lt;mmsystem.h&gt; #pragma...

Доступ к элементам через WinAPI
Если внутри функции я пишу так: CEdit* pEdit; pEdit = (CEdit*) GetDlgItem(FindWindow(NULL,...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru