![]() |
TX Library Help – Version: 00173a, Revision: 175
|
Классы | |
| union | txWaveSample_t |
| Тип данных, использующийся для внутреннего представления звуков согласно формату txWaveFormat. Подробнее... | |
Определения типов | |
| typedef std::vector < txWaveSample_t > | txWaveData_t |
| Тип, использующийся для буферов данных. | |
| typedef bool | MonitorProc_t (HWAVEIN waveIn, txWaveData_t &data, void *userData) |
| Тип функции-монитора для функции txWaveIn(). | |
Функции | |
| HWAVEOUT | txWaveOut (int timeMs=-INT_MAX, double freqL=0, double volL=50, double freqR=-1, double volR=-1, int loops=1, const txWaveData_t &data=txWaveData_t()) |
| Проигрывает звук через звуковую карту. | |
| HWAVEOUT | txWaveOut (const txWaveData_t &data, int loops=1) |
| Проигрывает подготовленный или загруженный буфер через звуковую карту. | |
| bool | MonitorProc (HWAVEIN waveIn, txWaveData_t &data, void *userData) |
| Функция-монитор, регулярно вызывающаяся при записи звука. | |
| txWaveData_t | txWaveIn (int timeMs, MonitorProc_t *monitorProc=NULL, void *monitorData=NULL, unsigned frameTime=0) |
| Записывает звук со звуковой карты. | |
| unsigned long | txWaveGetPosition (void *wave) |
| Возвращает текущую позицию воспроизведения или записи. | |
| txWaveData_t | txWaveLoadWav (const char filename[]) |
| Загружает звуковые данные из WAV-файла. | |
| bool | txWaveSaveWav (const txWaveData_t &data, const char filename[]) |
| Сохраняет звуковые данные в WAV-файле. | |
Переменные | |
| const double | txWaveSampleRate = 44.100 |
| Скорость аудиопотока для TXWave в семплах на 1 миллисекунду. | |
| const WAVEFORMATEX | txWaveFormat |
| Формат аудиоданных для TXWave. | |
| const double | txWaveVolMax |
| Максимальная громкость в txWaveSample_t, согласно формату txWaveFormat. | |
| typedef std::vector<txWaveSample_t> txWaveData_t |
Тип, использующийся для буферов данных.
Это std::vector <txWaveSample_t>.
txWaveSample_t эквивалентен массиву из двух элементов типа short, соответствующим левому и правому каналу.
Максимальная громкость в канале задается константой txWaveVolMax.
int time = 2000; txWaveData_t wav (ROUND (time * txWaveSampleRate)); printf ("Generating the waveform ~880 Hz...\n"); for (unsigned i = 0; i < wav.size(); i++) wav[i][0] = wav[i][1] = (short) (sin (i*0.125) * txWaveVolMax); // * 2*M_PI/44100 * 880 printf ("Playing %d sec...\n\n", time/1000); txWaveOut (buf); // Проигрываем звук txWaveOut(); // Ожидаем конца проигрывания
| typedef bool MonitorProc_t(HWAVEIN waveIn, txWaveData_t &data, void *userData) |
Тип функции-монитора для функции txWaveIn().
| waveIn | Дескриптор устройства записи |
| data | Ссылка на буфер, где находятся записанные данные |
| userData | Указатель на пользовательские данные monitorData, переданные из функции txWaveIn() |
true. Если надо закончить запись - false.| HWAVEOUT txWaveOut | ( | int | timeMs = -INT_MAX, |
| double | freqL = 0, |
||
| double | volL = 50, |
||
| double | freqR = -1, |
||
| double | volR = -1, |
||
| int | loops = 1, |
||
| const txWaveData_t & | data = txWaveData_t() |
||
| ) |
Проигрывает звук через звуковую карту.
| timeMs | Время звучания в миллисекундах |
| freqL | Частота звука в левом канале в Герцах |
| volL | Громкость звука в левом канале в процентах от максимума |
| freqR | Частота звука в правом канале в Герцах |
| volR | Громкость звука в правом канале в процентах от максимума |
| loops | Сколько раз повторять звук |
| data | Подготовленные данные для воспроизведения (например, загруженные из WAV-файла) |
time:time положительно, то функция начинает воспроизведение и возвращается, а звук продолжает звучать в фоновом режиме.|time| миллисекунд.time равно нулю, то воспроизведение сразу прекращается.freqL, freqR) и громкости (volL, volR) каналов:freqL не указана или равна 0, то будут учитываться только данные из буфера левого канала.volL не указана, то она полагается равной 50%.freqR не указана, то она полагается равной частоте левого канала.volR не указана, то она полагается равной громкости левого канала.data.freqL == 0 или volL == 0), так и в правом (freqR == 0 или volR == 0), то фактическая длительность звучания определяется не параметром time, а размером буфера data.data:data напрямую влияют на мембраны колонок или наушников.volL и volR.data не указан, то он не учитывается.data можно сочетать с частотами freqL и freqR.data должен быть размером не менее, чем time * txWaveSampleRate.time, то при исчерпании данных вектора они будут игнорироваться.// Звук 1 сек, 880 Гц, моно, 50% громкости txWaveOut (1000, 880); // Запустить проигрывание, далее оно идет в фоновом режиме // Сирена 880 +/- 88 Гц, моно, 50% громкости for (double t = -0.1; !_kbhit(); t += 0.1) txWaveOut (100, 880 + 88 * cos (t)); // Сирена 880 +/- 88 Гц, стерео for (double t = -0.1; !_kbhit(); t += 0.1) txWaveOut (100, 880 + 88 * cos (t), 100, 880 + 88 * sin (t), 100);
| HWAVEOUT txWaveOut | ( | const txWaveData_t & | data, |
| int | loops = 1 |
||
| ) |
Проигрывает подготовленный или загруженный буфер через звуковую карту.
| data | Подготовленные данные для воспроизведения (например, загруженные из WAV-файла) |
| loops | Сколько раз повторять звук |
// Музыка, загруженная из файла txWaveOut (txWaveLoadWav ("Purr.wav")); // Начинаем проигрываем звук, он воспроизводится асинхронно ... txSleep(); // Ожидаем конца проигрывания // Музыка, формируемая в буфере // See http://countercomplex.blogspot.ru/2011/10/algorithmic-symphonies-from-one-line-of.html int time = 90000; txWaveData_t buf (ROUND (time * txWaveSampleRate)); unsigned size = (unsigned) buf.size(); for (unsigned i = 0; i < size; i++) { int t = i/5; int val = (((t >> 7) | t | (t >> 6)) * 10 + 4 * ((t & (t >> 13)) | (t >> 6))) & 0xFF; buf[i][0] = buf[i][1] = (short) ((val/127.0 - 1) / (1 + pow (15, 17.0*i/size - 15)) * txWaveVolMax); } HWAVEOUT waveOut = txWaveOut (buf); assert (waveOut); // Запускаем звук while (txWaveGetPosition (waveOut) < size) // Проигран ли звук до конца? { if (_kbhit())) txWaveOut (0); // Закончить звук, если нажали клавишу Sleep (100); }
| bool MonitorProc | ( | HWAVEIN | waveIn, |
| txWaveData_t & | data, | ||
| void * | userData | ||
| ) |
Функция-монитор, регулярно вызывающаяся при записи звука.
| waveIn | Дескриптор устройства записи |
| data | Ссылка на буфер, где находятся записанные данные |
| userData | Указатель на пользовательские данные monitorData, переданные из функции txWaveIn() |
true. Если надо закончить запись - false.bool MonitorProc (HWAVEIN, txWaveData_t& data, void*) { static const char line1[] = "-------------------------"; static const char line2[] = "|||||||||||||||||||||||||"; static const int lineSz = sizeof (line1) - 1; unsigned pos = (unsigned) data.size(); unsigned size = (unsigned) data.capacity(); unsigned done = (unsigned) (100 * pos/size); double avr = 0; if (pos >= 100) for (unsigned i = pos - 100; i < pos; i++) avr += (abs (data[i][0]) + abs (data[i][1])) / txWaveVolMax; int vol = (avr <= 100)? (int) avr : 100; printf ("Done %6u/%6u samples [%.*s|%.*s] %3u%% [%.*s%.*s%s %3d%% \r", pos, size, (int) (lineSz*done/100), line1, (int) (lineSz - lineSz*done/100), line1, done, (int) (lineSz*vol /100), line2, (int) (lineSz - lineSz*vol /100), line1, (vol < 100? "]" : "X"), vol); return (_kbhit()? (_getch(), false) : true); }
См. определение в файле TXWaveExample.cpp строка 245
| txWaveData_t txWaveIn | ( | int | timeMs, |
| MonitorProc_t * | monitorProc = NULL, |
||
| void * | monitorData = NULL, |
||
| unsigned | frameTime = 0 |
||
| ) |
Записывает звук со звуковой карты.
| timeMs | Время записи в миллисекундах |
| monitorProc | Функция, которая вызывается после каждого записанного кадра длиной frameTime мсек |
| monitorData | Указатель на пользовательские данные, которые будут переданы функции monitorProc |
| frameTime | Интервал времени записи, через который будет вызываться функция monitorProc, мсек |
frameTime не указан или равен 0, он устанавливается равным 100 миллисекунд.txWaveData_t wav = txWaveIn (20000); // Записываем звук 20 секунд txWaveOut (wav); // Проигрываем звук txWaveOut(); // Ожидаем конца проигрывания // Пример с функцией-монитором см. в файле TXWaveExample.cpp.
| unsigned long txWaveGetPosition | ( | void * | wave | ) |
Возвращает текущую позицию воспроизведения или записи.
| wave | Устройство воспроизведения или записи |
HWAVEOUT waveOut = txWaveOut (time, 440); assert (waveOut); // Запускаем звук while (txWaveGetPosition (waveOut) < size) // Проигран ли звук до конца? { if (_kbhit())) txWaveOut (0); // Закончить звук, если нажали клавишу printf ("."); Sleep (100); }
| txWaveData_t txWaveLoadWav | ( | const char | filename[] | ) |
Загружает звуковые данные из WAV-файла.
| filename | Имя файла в формате WAV |
std::vector <txWaveData_t>, с загруженными данными.size().txWaveData_t purr = txWaveLoadWav ("Purr.wav"); txWaveOut (purr); // Проигрываем звук txWaveOut(); // Ожидаем конца проигрывания
| bool txWaveSaveWav | ( | const txWaveData_t & | data, |
| const char | filename[] | ||
| ) |
Сохраняет звуковые данные в WAV-файле.
| data | Данные для записи (например, записанные с помощью txWaveIn(), или вычисленные по формуле) |
| filename | Имя файла с расширением WAV |
txWaveData_t wav = txWaveIn (20000); // Записываем звук txWaveSaveWav (wav, "Recording.wav"); // Сохраняем звук в файл
| const double txWaveSampleRate = 44.100 |
Скорость аудиопотока для TXWave в семплах на 1 миллисекунду.
| const WAVEFORMATEX txWaveFormat |
Формат аудиоданных для TXWave.
Амплитудная модуляция без сжатия, 2 канала, 16 бит на канал, 44.100 кГц (txWaveSampleRate).
| const double txWaveVolMax |
Максимальная громкость в txWaveSample_t, согласно формату txWaveFormat.