96 / 31 / 21
Регистрация: 17.09.2014
Сообщений: 1,422
1

Как записывается звук в 2е данные?

06.12.2016, 18:54. Показов 666. Ответов 2
Метки нет (Все метки)

Не пойму, как мне проверить сигнал с микрофона.

Тип файла:Моно
Размер без сжатия:85 bytes
Формат файла:Windows PCM 130,00 bytes
Длина:0:00.014
85 samples

Так выглядит в графике:
Как записывается звук в 2е данные?


Так в HEX:
80 7f 7f 81 7f 7f 7f 80 82 81 82 81 7f 7f 80 7f
81 80 81 81 82 82 80 80 80 80 80 80 80 81 80 7e
7f 80 81 81 82 81 7f 7f 82 81 81 81 81 81 7f 81
81 81 80 83 81 7e 80 7f 80 82 82 80 81 80 81 80
80 7f 80 80 80 81 80 81 80 80 80 81 7f 7f 7f 80
81 7f 7f 7f 81
В 10м виде:
128 127 127 129 127 127 127 128 130 129 130 129 127 127 128 127
129 128 129 129 130 130 128 128 128 128 128 128 128 129 128 126
127 128 129 129 130 129 127 127 130 129 129 129 129 129 127 129
129 129 128 131 129 126 128 127 128 130 130 128 129 128 129 128
128 127 128 128 128 129 128 129 128 128 128 129 127 127 127 128
129 127 127 127 129
В бинарном:
10000000 01111111 01111111 10000001 01111111 01111111 01111111 10000000
10000010 10000001 10000010 10000001 01111111 01111111 10000000 01111111
10000001 10000000 10000001 10000001 10000010 10000010 10000000 10000000
10000000 10000000 10000000 10000000 10000000 10000001 10000000 01111110
01111111 10000000 10000001 10000001 10000010 10000001 01111111 01111111
10000010 10000001 10000001 10000001 10000001 10000001 01111111 10000001
10000001 10000001 10000000 10000011 10000001 01111110 10000000 01111111
10000000 10000010 10000010 10000000 10000001 10000000 10000001 10000000
10000000 01111111 10000000 10000000 10000000 10000001 10000000 10000001
10000000 10000000 10000000 10000001 01111111 01111111 01111111 10000000
10000001 01111111 01111111 01111111 10000001
Как мне посчитать все семплы, которые выше 42dB ?
Вроде так на вскидку 128 - это 0, больше - значит выше, меньше - значит ниже.
И в моём случае всё, что больше 129 получается?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2016, 18:54
Ответы с готовыми решениями:

SoundMax, не записывается звук динамиков
Почти везде описывается решение этой проблемы через панель управления SoundMax путём проставления...

При записи игры не записывается звук
При записи игры,не пишет звук,может что в настройках не так,кто сталкивался с такой проблемой...

При записи фильма не записывается звук
при записи фильма с помощью nero vision не записывается звук, на придыдущей семерке все работало....

При записи видео с видеокамеры не записывается звук
Проблемка: Есть проги для записи видео с видеокамеры: Acive WebCam и Webcam Motion Detector. И обе...

2
96 / 31 / 21
Регистрация: 17.09.2014
Сообщений: 1,422
06.12.2016, 20:05  [ТС] 2
Да что за бред!!!

C
1
2
3
4
5
short int waveIn[5]; // Сюда получил звук
 
// Вывожу:
char tt[100]; sprintf_s(tt, sizeof(tt), "%d %d %d %d %d", waveIn[0], waveIn[1], waveIn[2], waveIn[3], waveIn[4]);
MessageBoxA(NULL, tt, "Семплы", MB_ICONHAND);
А там вон чего показывает:
-32127 -32383 -32126 -32383 -32382
Добавлено через 21 минуту
Ааа...Дошло...
0
96 / 31 / 21
Регистрация: 17.09.2014
Сообщений: 1,422
10.12.2016, 05:20  [ТС] 3
Как сделать в реальном времени, чтобы программа не висела намертво?
Нужно просто 100 раз в секунду проверить сигнал.
И выводить каждые 0.5 секунды.

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
const int sampleRate = 500;     // Частота дискретизации Гц
const int NUMPTS = 5;           // Размер буфера
char waveIn[NUMPTS];            // Буфер
 
void count_mic()
{
    if(score_type) count--;
    else count++;
    char buffer[13]; _itoa_s(count, buffer, 10);
    SetWindowTextA(hE[0], buffer);
 
    WAVEFORMATEX pFormat;
    pFormat.wFormatTag = WAVE_FORMAT_PCM;                                                       // Формат звуковых данных
    pFormat.nChannels = 1;                                                                      // Количество каналов (моно или стерео)
    pFormat.wBitsPerSample = 8;                                                                 // Битрейт (16 или 8)
    pFormat.nSamplesPerSec = sampleRate;                                                        // Частота дискретизации Гц
    pFormat.nAvgBytesPerSec = (sampleRate * pFormat.nChannels * pFormat.wBitsPerSample) / 8;    // Скорость потока данных
    pFormat.nBlockAlign = (pFormat.nChannels * pFormat.wBitsPerSample) / 8;                     // Выравнивание блока данных
    pFormat.cbSize = 0;
 
    HWAVEIN hWaveIn; waveInOpen(&hWaveIn, WAVE_MAPPER, &pFormat, 0L, 0L, WAVE_FORMAT_DIRECT);   // Открыть устройство записи
 
    WAVEHDR waveInHdr;
    waveInHdr.lpData = (LPSTR)waveIn;       // Адрес блока данных
    waveInHdr.dwBufferLength = NUMPTS * 2;  // Размер блока данных
    waveInHdr.dwBytesRecorded = 0;          // Количество записанных байт 
    waveInHdr.dwUser = 0L;                  // Пользовательские данные (используется только при записи)
    waveInHdr.dwFlags = 0L;                 // Флаги состояния буфера данных (используется только при записи)
    waveInHdr.dwLoops = 0L;                 // Кратность проигрывания буфера (используется только при записи)
 
    waveInPrepareHeader(hWaveIn, &waveInHdr, sizeof(WAVEHDR));  // Подготовка блока памяти перед передачей драйверу
    waveInAddBuffer(hWaveIn, &waveInHdr, sizeof(WAVEHDR));      // Передача блока памяти драйверу
    waveInStart(hWaveIn);                                       // Приступить к записи
 
    while(waveInUnprepareHeader(hWaveIn, &waveInHdr, sizeof(WAVEHDR)) == WAVERR_STILLPLAYING) {}; // Дождаться, когда кончится запись
 
    waveInClose(hWaveIn); // Закрыть устройство записи
 
    //char tt[300]; sprintf_s(tt, sizeof(tt), "%i %i %i %i %i", waveIn[0], waveIn[1], waveIn[2], waveIn[3], waveIn[4]);
    //MessageBoxA(NULL, tt, "Семплы", MB_ICONHAND);
 
    /*int i = -1;
 
    while(++i < 5);
    {
        if((waveIn[i] < -70 || waveIn[i] > 70) && !breaking)
        {
            if(score_type) count--;
            else count++;
            char buffer[13]; _itoa_s(count, buffer, 10);
            SetWindowTextA(hE[0], buffer);
            breaking = true;
        }
        else if(breaking) breaking = false;
    }*/
    count_mic(); // Заново.
    //return 0;
}
Добавлено через 22 часа 20 минут
Нашел.
https://ru.wikipedia.org/wiki/... 0%B8%D1%8F

Первые 4 бита определяют положительную амплитуду, следующие 4 - отрицательную...
1 байт = 1 семпл.

И походу каждый семпл(байт), это разница напряжения между предыдущим и текущим, поэтому так мал диапазон(256).
Волна выстраивается из последовательности семплов, 1й всегда равен 0(128).
Если следующий байт равен 128 - значит волна отклоняется вверх, если 127 - вниз.

Мдаа...Уж если у меня программа висит при простой проверке, определение амплитуды вообще весь комп в ступор загонит...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2016, 05:20
Помогаю со студенческими работами здесь

Не записывается в бд данные
Код PHP: &lt;? $query = &quot;SELECT * FROM members WHERE member_id ='{$id}' AND...

Записывается ли в объект класса данные при моей реализации?
Хочу спросить: записываются ли данные при вводе в объект класса? Или это записывается лишь в метод...

При нажатии Enter в DBEdit динамик издает Beep (звук). Как этот звук отключить ?
При нажатии Enter в DBEdit динамик издает Beep (звук). Как этот звук отключить ?

Как ввести звук в телевизор с медиацентра (компьютера), если DVI выход не передаёт звук? A аудио только на другом входе
Есть компьютер с DVI выходом. DVI v1.0, старый, поэтому звук не передаёт, только видео. Телевизор...

Как на c++ записывается y = f(x) ?
Как на c++ записывается? y = f(x)

Как записывается arcctg x?
Подскажите пожалуйста как записывается arcctg x в си#?


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru