SndLen = 44100 * 4 * 2 * ceil(fsize / (44100 * (4) * 2));
SndLen = 0;
strcat( wh1.riff, "RIFF" );
wh1.filesize = SndLen + 38;
strcat( wh1.rifftype, "WAVE" );
strcat( wh1.chunk_id1, "fmt ");
wh1.chunksize1 = 16;
wh1.wFormatTag = 1;
wh1.nChannels = 2;
wh1.nSamplesPerSec = 44100;
wh1.nAvgBytesPerSec = wh1.nSamplesPerSec * wh1.wBitsPerSample % 8 * wh1.nChannels;
wh1.nBlockAlign = wh1.nChannels * wh1.wBitsPerSample % 8;
wh1.wBitsPerSample = 16;
strcat( wh1.chunk_id2, "data" );
wh1.chunksize2 = SndLen;
of = fopen( "d.wav", "r" );
wavFile = fopen( "2.wav", "w" );
fwrite( &wh1, sizeof( wh1 ), 1, wavFile );
int ss;
char buf[1024];
while( !feof( of ) )
{
ss = fread( &buf, 1024, 1, of );
fwrite( &buf, 1024, 1, wavFile );
}
fclose( of );
fclose( wavFile );
Запись WAVE
Проблема в следующем: надо записать wav файл. Пишу так (c builder):
Код:
немного кривовато :). Видимо, что-то не так в заголовке, винамп пишет что файл поврежден. Кто поможет? Или есть рабочий пример?
Цитата:
wavFile = fopen( "2.wav", "w" );
Проверь метод записи. У меня была подобная проблема пару лет назад. Что-то не то было с символом конца строки
Для записи wav файлов больше подходит двоичный режим.
Для его использования требуется заменть код
Код:
of = fopen( "d.wav", "r" );
...
wavFile = fopen( "2.wav", "w" );
...
wavFile = fopen( "2.wav", "w" );
на
[highlight=C]
of = fopen( "d.wav", "rb" );
wavFile = fopen( "2.wav", "wb" );
[/highlight]