Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

При кодировании в MP3 отсутствует звук


Страницы:   1 2

VoVan ©   (2008-03-25 05:16:00) 

Всем привет. Столкнулся с такой проблемкой: при попытке преобразования миди в мп3 отсутствует звук при воспроизведении полученного мп3-файла, причем если сжимать в мп3 вав-файлы со звуком все в порядке. Пользовался bass.dll, bassmidi.dll, lame_inc.dll.


Сергей М.   (2008-03-26 08:27:00) [21]


> Efir   (25.03.08 20:44) [3]


> Покажите мне строку, где кодируются сами MIDI данные


be EncodeChunk


Efir   (2008-03-25 20:55:00) [22]


> VoVan ©   (25.03.08 05:16)


У тебя точно MIDI файл, самим bass'ом он проигрывается?


Efir   (2008-03-25 20:44:00) [23]


> Сергей М. ©   (25.03.08 08:41) [2]


Покажите мне строку, где кодируются сами MIDI данные, если это
BASS_ChannelGetData(BassChan, BufMIDI, SizeOfRead);, то вы глубоко не правы.


Сергей М.   (2008-03-25 08:41:00) [24]


> При кодировании в MP3 отсутствует звук


Потому что полная ахинея этом в алгоритме .
Ты пытаешься кодировать в mp3 не результат синтеза, а сами midi-данные.


VoVan   (2008-03-25 05:19:00) [25]

Вот кусок кода:


function EncodeToMP3(InFile:string; OutFile:string):boolean;
var
NumSamples:DWORD;
InBufSize: DWORD;
OutBufSize:DWORD;
BufMIDI:PSHORT;
BufMP3: PBYTE;
BassChan:HSTREAM;
beStream:THBESTREAM;
beConfig:TBECONFIG;
fWrite:TFileStream;
SizeOfRead:DWORD;
Encoded: DWORD;
ErrRes:TBeErr;
i, MIDILeng:DWORD;  s: string;
begin
Result:=false;

BassChan:=BASS_MIDI_StreamCreateFile(false, PChar(InFile), 0, 0, BASS_STREAM_DECODE, 44100);
if BassChan=0 then begin
 BASS_StreamFree(BassChan);
 Exit;
end;

FillChar(beConfig, SizeOf(beConfig), 0);
beConfig.Format.dwConfig:=BE_CONFIG_LAME;
beConfig.Format.LHV1.dwStructVersion:=1;
beConfig.Format.LHV1.dwStructSize:=SizeOf(beConfig);
beConfig.Format.LHV1.dwSampleRate:=44100;
beConfig.Format.LHV1.dwReSampleRate:=0;
beConfig.Format.LHV1.nMode:=BE_MP3_MODE_STEREO;
beConfig.Format.LHV1.dwBitrate:=192;
beConfig.Format.LHV1.dwMaxBitrate:=320;
beConfig.Format.LHV1.nQuality:=2;
beConfig.Format.LHV1.dwMpegVersion:=MPEG1;

MIDILeng:=BASS_ChannelGetLength(BassChan);
ErrRes:=beInitStream(beConfig, NumSamples, OutBufSize, beStream);
if ErrRes<>BE_ERR_SUCCESSFUL then begin
 beCloseStream(beStream);
 BASS_StreamFree(BassChan);
 Exit;
end;

InBufSize:=NumSamples*4;
 s:=ExtractFileName(InFile);
OutFile:=OutFile+Copy(s, 1, Length(s)-Length(ExtractFileExt(s)))+'.mp3';
fWrite:=TFileStream.Create(OutFile, fmCreate);
try
 BufMIDI:=AllocMem(InBufSize);
 BufMP3:=AllocMem(OutBufSize);
 try
   i:=0;
   while i<>MIDILeng do begin
     if i+InBufSize<MIDILeng then SizeOfRead:=InBufSize
       else SizeOfRead:=MIDILeng-i;

     BASS_ChannelGetData(BassChan, BufMIDI, SizeOfRead);
     ErrRes:=beEncodeChunk(beStream, SizeOfRead div 2, BufMIDI, BufMP3, Encoded);
     if ErrRes<>BE_ERR_SUCCESSFUL then Exit;

     fWrite.WriteBuffer(BufMP3^, Encoded);
     i:=i+SizeOfRead;
   end;

   ErrRes:=beDeinitStream(beStream, BufMP3, Encoded);
   if ErrRes<>BE_ERR_SUCCESSFUL then Exit;

   fWrite.WriteBuffer(BufMP3^, Encoded);
 finally
   fWrite.Free;
   BASS_StreamFree(BassChan);
   beCloseStream(beStream);
 end;
finally
 FreeMem(BufMIDI);
 FreeMem(BufMP3);
end;
Result:=true;
end;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо