「可逆圧縮(猿音)」の編集履歴(バックアップ)一覧はこちら

可逆圧縮(猿音)」(2010/01/23 (土) 04:02:50) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

今回はオウディオの可逆圧縮をやってみよう。 いろんな形式があって迷うんだけど、ABでやるならapeが一番簡単かな。 [[Monkey's Audio>http://www.monkeysaudio.com/]]からSDKをダウソ。MACDll.dllをシステムフォルダに投げる。 つぎにABでイカのコードをコピペ。 test.wavをHirai-Kimihiko.apeにエンコする。 #console #include <api_mmsys.sbp> Typedef APE_COMPRESS_HANDLE = VoidPtr Declare Function c_APECompress_Create Lib"MACDll.dll" (pErrorCode As *Long) As APE_COMPRESS_HANDLE Declare Sub c_APECompress_Destroy Lib"MACDll.dll" (hAPECompress As APE_COMPRESS_HANDLE) Declare Function c_APECompress_Start Lib"MACDll.dll" ( hAPECompress As APE_COMPRESS_HANDLE, pOutputFilename As BytePtr, pwfeInput As *WAVEFORMATEX, nMaxAudioBytes As Long, nCompressionLevel As Long, pHeaderData As *Byte, nHeaderBytes As Long) As Long Declare Function c_APECompress_AddData Lib"MACDll.dll" (hAPECompress As APE_COMPRESS_HANDLE, pData As *Byte , nBytes As Long) As Long Declare Function c_APECompress_Finish Lib"MACDll.dll" (hAPECompress As APE_COMPRESS_HANDLE, pTerminatingData As *Byte , nTerminatingBytes As Long, nWAVTerminatingBytes As Long) As Long Const COMPRESSION_LEVEL_HIGH = 3000 Const CREATE_WAV_HEADER_ON_DECOMPRESSION = -1 Const infile = "test.wav" Const WAVE_HEADSIZE = 44 'main main() Sub main() Dim wfe As WAVEFORMATEX Dim r As Long Dim ha As APE_COMPRESS_HANDLE Dim hF As HANDLE Dim siz As DWord Dim read As DWord, rt As DWord Dim buf As *Byte hF = CreateFile(infile, GENERIC_READ, 0, ByVal 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) siz = GetFileSize(hF, NULL)-WAVE_HEADSIZE SetFilePointer(hF, WAVE_HEADSIZE,0,FILE_BEGIN )'ヘッダをとばす wfe.cbSize = siz wfe.nSamplesPerSec = 44100 wfe.wBitsPerSample = 16 wfe.nChannels = 2 wfe.wFormatTag = 1 wfe.nBlockAlign = (wfe.wBitsPerSample / 8) * wfe.nChannels wfe.nAvgBytesPerSec = wfe.nBlockAlign * wfe.nSamplesPerSec buf = malloc(wfe.nAvgBytesPerSec) ha = c_APECompress_Create(VarPtr(r)) c_APECompress_Start(ha, "Hirai-Kimihiko.ape", VarPtr(wfe), siz, COMPRESSION_LEVEL_HIGH, NULL, CREATE_WAV_HEADER_ON_DECOMPRESSION) read = 1 While read ReadFile( hF, buf, wfe.nAvgBytesPerSec,VarPtr(read), ByVal 0) r = c_APECompress_AddData(ha, buf, read) rt = rt + read Print rt;" / ";siz Wend c_APECompress_Finish(ha, NULL, 0, 0) c_APECompress_Destroy(ha) CloseHandle(hF) Input "ok";buf free(buf) End Sub

表示オプション

横に並べて表示:
変化行の前後のみ表示: