> Слушай, ты подкинул мне классный пример для работы со > звуковухой, а нет такого же только по работе с модемом? В свое время долго и нудно разбирался по юзнетовским архивам (groups.google.com). Советую для начала поискать в форуме - там я довольно подробно расписал все. А если будут вопросы - обращайся, может чего и вспомню (было это года два назад).
> Если есть подкинь линку, буду очень благодарен. Как я > понимаю отличеие в них немного, работа с устройством > осуществляется подобным образом, только используются TAPI > функции(аналоги работы со звуковым устройством). Не совсем. Тапи действительно используется, но только для инициализации войс-режима и получения хендла звукового устройства. А дальше в ход идут совершенно те же методы и функции, что и для обычных звуковых устройств.
Стоит задача записать в файл звук от микрафона. Я определил ID Devis'a (звуковухи), заполнил все необходимые структуры отвечающие за качество звука, открыл устройство waveInOpen(...) затем его запустил waveInStart(). Теперь нужно считать данные в файл. Как я понимаю это нужно делать посредством сообщения MM_WIM_DATA... Если нет, прошу меня поправить и подсказать как надо потаму, что ничего у меня не получается!!!! Если есть какие исходнячки или где в сети информация, прошу поделитесь...
[C++] Direct to disk recorder20.10.03 11:12 Автор: amirul <Serge> Статус: The Elderman
> Стоит задача записать в файл звук от микрафона. Я > определил ID Devis'a (звуковухи), заполнил все необходимые > структуры отвечающие за качество звука, открыл устройство > waveInOpen(...) затем его запустил waveInStart(). Теперь > нужно считать данные в файл. Как я понимаю это нужно делать > посредством сообщения MM_WIM_DATA... Если нет, прошу меня Все верно :-)
Есть чтение/запись wav файла в/из произвольного звукового устройства с произвольным кодеком.
Если нужно больше инфы, советую посмотреть архивы форума. Здесь пролетало довольно детальное обсуждение этого вопроса. Правда в контексте voice-modem-а, что не меняет сути, т.к. там нужно найти звуковое устройство этого самого модема и работать с ним самым обычным образом.
Создаю wav файл, проблемм с данными нет, проблемма в заполнении заголовков. Непонятны некоторые пункты:
typedef struct {
char id[4]; - идентификатор файла = "RIFF" = 0x46464952
long len; - длина файла без этого заголовка
} IDRiff;
Что есть len? как я понял это = длинна файла - sizeof(данная структуры).
typedef struct {
char id[4]; - идентификатор = "WAVE" = 0x45564157
char fmt[4]; - идентификатор = "fmt " = 0x20746D66
long len; - длина этого куска WAV - файла,
} IDChuckWave;
Что есть len здесь? Как я понял это длинна файла без предыдущих двух структур.
typedef struct {
int type; - тип звуковых данных, бывает - !!!
1 - просто выборка;
0x101 - IBM mu-law;
0x102 - IBM a-law;
0x103 - ADPCM.
int channels; - число каналов 1/2 - !!!
long SamplesPerSec; - частота выборки - !!!
long AvgBytesPerSec; - частота выдачи байтов
int align; - выравнивание
int bits; - число бит на выборку - !!!
} IDWave;
Что есть AvgBytesPerSec и откуда берётся, зависит ли она от SamplesPerSec?
Непонятно, что align должен содержать?
> Создаю wav файл, проблемм с данными нет, проблемма в > заполнении заголовков. Непонятны некоторые пункты: > typedef struct { > char id[4]; - идентификатор файла = "RIFF" = > 0x46464952 > long len; - длина файла без этого заголовка > } IDRiff; > Что есть len? как я понял это = длинна файла - > sizeof(данная структуры). Length - длина данных для данного chunk-f. В чанке RIFF содержится весь файл.
> typedef struct { > char id[4]; - идентификатор = "WAVE" = 0x45564157 > char fmt[4]; - идентификатор = "fmt " = 0x20746D66 > long len; - длина этого куска WAV - файла, > } IDChuckWave; > Что есть len здесь? Как я понял это длинна файла без > предыдущих двух структур. А в чанке WAVE/fmt - звуковой формат (WAVEFORMAT/WAVEFORMATEX) и его длина будет равна полю cbSize из этой структуры.
> typedef struct { > int type; - тип звуковых данных, бывает - !!! > 1 - просто выборка; > 0x101 - IBM mu-law; > 0x102 - IBM a-law; > 0x103 - ADPCM. > int channels; - число каналов 1/2 - !!! > long SamplesPerSec; - частота выборки - !!! > long AvgBytesPerSec; - частота выдачи байтов > int align; - выравнивание > int bits; - число бит на выборку - !!! > } IDWave; Не смотри сюда смотри в MSDN. На самом деле эта структура WAVEFORMAT как я уже написал. Сохраняется в файл один к одному как была получена из ACM. Как получить нужный формат или смотри пример или догадайся сам (MSDN в помощь).
> Что есть AvgBytesPerSec и откуда берётся, зависит ли она от > SamplesPerSec? > Непонятно, что align должен содержать? Читай MSDN.
> Описание формата взято с > http://codenet.ru/progr/formt/rawsam.php А потому как не фиг :-)
Похоже, ты очень невнимательно читал пример, который я тебе дал. Там есть работа с wav файлами.
Вкратце это выглядит так: заходишь в chunk (mmioDescend), делаешь в нем всю необходимую работу (например создаешь другие chunk-и или записываешь данные), выходишь из chunk-а (mmioAscend) - поле Length заполняется автоматически.
И не надо изобретать велосипедов и работать с wav форматом напрямую. Иначе я предложу работать напрямую и с файловой системой или еще ниже - с дисковым контроллером, а также похерить ACM и написать свой кодек mp3.
Вопрос на отвлечённую тему (про модем)21.10.03 21:40 Автор: CrazyPitbull Статус: Незарегистрированный пользователь
Слушай, ты подкинул мне классный пример для работы со звуковухой, а нет такого же только по работе с модемом? Если есть подкинь линку, буду очень благодарен. Как я понимаю отличеие в них немного, работа с устройством осуществляется подобным образом, только используются TAPI функции(аналоги работы со звуковым устройством).
Нету :-(21.10.03 22:30 Автор: amirul <Serge> Статус: The Elderman
> Слушай, ты подкинул мне классный пример для работы со > звуковухой, а нет такого же только по работе с модемом? В свое время долго и нудно разбирался по юзнетовским архивам (groups.google.com). Советую для начала поискать в форуме - там я довольно подробно расписал все. А если будут вопросы - обращайся, может чего и вспомню (было это года два назад).
> Если есть подкинь линку, буду очень благодарен. Как я > понимаю отличеие в них немного, работа с устройством > осуществляется подобным образом, только используются TAPI > функции(аналоги работы со звуковым устройством). Не совсем. Тапи действительно используется, но только для инициализации войс-режима и получения хендла звукового устройства. А дальше в ход идут совершенно те же методы и функции, что и для обычных звуковых устройств.
ТО, что надо!!!20.10.03 11:41 Автор: CrazyPitbull Статус: Незарегистрированный пользователь