Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись Wav файла 
V
    Опции темы
WapCel
Дата 3.9.2012, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 3.11.2008
Где: Moldova

Репутация: нет
Всего: нет



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

Код

//---------------------------------------------------------------------------

#include <vcl.h>
#include <mmsystem.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
HWAVEIN hWaveIn;
WAVEFORMATEX WaveFormat;
WAVEHDR WaveHdr;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
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;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
waveInOpen(&hWaveIn, WAVE_MAPPER, &WaveFormat, (DWORD)Handle, 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::Button2Click(TObject *Sender)
{
waveInStop(hWaveIn);

waveInUnprepareHeader(hWaveIn, &WaveHdr, sizeof(WAVEHDR));




Label1->Caption = WaveHdr.dwBytesRecorded;


    //ULONG BufferSize = WaveFormat.nBlockAlign*WaveFormat.nSamplesPerSec*10;
    HMMIO hmmio;
 //Создаём новый файл
    hmmio = mmioOpen(L"testwww.wav", 0, MMIO_CREATE | MMIO_WRITE);
    mmioSeek(hmmio, 0, SEEK_SET);
       //создание заголовка
    MMCKINFO mmCkInfo;
    mmCkInfo.ckid = mmioFOURCC('R', 'I', 'F', 'F');
    mmCkInfo.fccType = mmioFOURCC('W', 'A', 'V', 'E');
    mmCkInfo.dwFlags = MMIO_DIRTY;
    mmioCreateChunk(hmmio, &mmCkInfo, MMIO_CREATERIFF);

//создание блока с информацией из структуры WAVEFORMATEX
    mmCkInfo.ckid = mmioFOURCC('f', 'm', 't', ' ');
    mmCkInfo.dwFlags = MMIO_DIRTY;
    mmCkInfo.cksize = sizeof(WaveFormat);
    mmioCreateChunk(hmmio, &mmCkInfo, NULL);
    mmioWrite(hmmio,(char*)&WaveFormat,sizeof(WaveFormat));

//создание одного болока с данными
    mmCkInfo.ckid = mmioFOURCC('d', 'a', 't', 'a');
    mmCkInfo.cksize = WaveHdr.dwBytesRecorded;
    mmCkInfo.dwFlags = MMIO_DIRTY;
    mmioCreateChunk(hmmio, &mmCkInfo, NULL);
    mmioWrite(hmmio,WaveHdr.lpData,WaveHdr.dwBytesRecorded);

    mmioClose(hmmio,MMIO_FHOPEN);




free(WaveHdr.lpData);
waveInClose(hWaveIn);

}
//---------------------------------------------------------------------------

PM MAIL WWW ICQ   Вверх
WapCel
  Дата 3.9.2012, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 3.11.2008
Где: Moldova

Репутация: нет
Всего: нет



Код

MMIOINFO mmioinfo;
MMCKINFO ckRIFF;
MMCKINFO ck;
HMMIO hmmio;

::ZeroMemory(&mmioinfo,sizeof(mmioinfo));

hmmio = mmioOpen(L"test.wav",&mmioinfo,MMIO_WRITE|MMIO_CREATE);

if (hmmio == NULL) {
ShowMessage("[!] mmioOpen();");
}

// Creating 'RIFF' and 'WAVE' chunks
ckRIFF.fccType = mmioFOURCC('W', 'A', 'V', 'E');
ckRIFF.cksize = 0L;
ckRIFF.dwFlags = MMIO_DIRTY;
mmioCreateChunk(hmmio, &ckRIFF, MMIO_CREATERIFF);

// Creating 'fmt ' chunk
ck.ckid = mmioFOURCC('f', 'm', 't', ' ');
ck.cksize = 0L;
ck.dwFlags = MMIO_DIRTY;
mmioCreateChunk(hmmio, &ck, 0);
mmioWrite(hmmio, (char*)&WaveFormat,sizeof(WaveFormat));

// Goto to 'WAVE' chunk and update 'fmt ' chunk size
mmioAscend(hmmio, &ck, 0);

// Creating 'data' chunk
ck.ckid = mmioFOURCC('d', 'a', 't', 'a');
ck.cksize = 0L;
ck.dwFlags = MMIO_DIRTY;
mmioCreateChunk(hmmio, &ck, 0);
mmioWrite(hmmio,WaveHdr.lpData,WaveHdr.dwBytesRecorded);

// Goto to 'WAVE' chunk and update 'data' chunk size
mmioAscend(hmmio, &ck, 0);

// Goto to 'RIFF' chunk and update 'WAVE' chunk size
mmioAscend(hmmio, &ckRIFF, 0);
mmioClose(hmmio,0);

PM MAIL WWW ICQ   Вверх
xvr
Дата 4.9.2012, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(WapCel @  3.9.2012,  18:24 Найти цитируемый пост)
 но не воспроизводится.

А где собственно воспроизведение? Да и запись несколько странная, буфера надо в процессе записи менять  smile 

PM MAIL   Вверх
WapCel
Дата 5.9.2012, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 3.11.2008
Где: Moldova

Репутация: нет
Всего: нет



Цитата(xvr @ 4.9.2012,  11:18)
Цитата(WapCel @  3.9.2012,  18:24 Найти цитируемый пост)
 но не воспроизводится.

А где собственно воспроизведение? Да и запись несколько странная, буфера надо в процессе записи менять  smile

smile мне нужно записать не более 3 секунд
так что все ок:) все нормально работает.
спасибо за отзывчивость.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0695 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.