Цитата:
Цитата от KEK$
(Сообщение 1073081214)
братва, выручайте
установил новый фрукт, так в эдисоне драг не работает.
уже и в разных форматах сохранял и пихал в плейлист, и в сэмплер, и в аудиоклип, никуда не перетягивается. притом что из самого аудиоклипа весь кусок идет в плейлистЮ а из эдисона нет Добавлено через 2 минуты 27 секунд охохо, знаете что мне выдало:
error in acmstreamopen(). no acm filter found capable of decoding
сейчас пойду кодеки глядеть | ребят, проблему решить не могу никак
все та же ошибка
на различных форумах видел штуку про установку vorbis - нашел, установил, результата ноль
никакие плагині не зарускаются, сємплер не работает
система: windows 7x64
кто может, выручайте Добавлено через 16 минут 56 секунд я часто нахожу на англоязычных сайт какие-то коды, но ума не приложу куда их совать
вот на русском нашел http://compression.ru/forum/messages/906.htm Код:
#include
#include
#include
#include
#include
#define WMA_BLOCK_SIZE 1000
#define SOURCE_WMA "d:wma_simple.wma"
#define OUTPUT_PCM_FILE "d:wma_simple.wav"
HACMDRIVERID WMADriverID[16];
int nWMADriverID=0;
BOOL CALLBACK acmDriverEnumCallback( HACMDRIVERID hadid, DWORD dwInstance, DWORD fdwSupport )
{
if( fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CODEC )
{
MMRESULT mmr;
ACMDRIVERDETAILS details;
details.cbStruct = sizeof(ACMDRIVERDETAILS);
mmr = acmDriverDetails( hadid, &details, 0 );
HACMDRIVER driver;
mmr = acmDriverOpen( &driver, hadid, 0 );
for (int i = 0; i cbSize;i++)
{
printf("%02x ",*(wmaFormat+sizeof(WAVEFORMATEX)+i));
}
printf("\n");
}
convertWMA()
{
MMRESULT mmr;
acmDriverEnum( acmDriverEnumCallback, 0, 0 );
if(nWMADriverID == 0)
{
OutputDebugString( "No WMA decoders found!\n" );
return E_FAIL;
}
HACMDRIVER hWMADriver;
int index=1;
acmDriverOpen(&hWMADriver,WMADriverID[index],0);
DWORD maxFormatSize = 0;
mmr = acmMetrics( NULL, ACM_METRIC_MAX_SIZE_FORMAT, &maxFormatSize );
LPWAVEFORMATEX wmaFormat = (LPWAVEFORMATEX) LocalAlloc( LPTR, maxFormatSize );
memset(wmaFormat,0,maxFormatSize);
LPWAVEFORMATEX wavFormat = (LPWAVEFORMATEX) LocalAlloc( LPTR, maxFormatSize );
memset(wavFormat,0,maxFormatSize);
wavFormat->wFormatTag = WAVE_FORMAT_PCM;
wavFormat->nChannels = 2;
wavFormat->nSamplesPerSec = 44100;
wavFormat->nAvgBytesPerSec = 4 * 44100;
wavFormat->nBlockAlign = 4;
wavFormat->wBitsPerSample = 16;
wavFormat->cbSize = 0;
ChooseFormat(wmaFormat, wavFormat);
g_wmastream = NULL;
mmr = acmStreamOpen( &g_wmastream,
hWMADriver,
(LPWAVEFORMATEX) wmaFormat,
wavFormat,
NULL,
0,
0,
0
);
LocalFree( wmaFormat );
LocalFree( wavFormat );
switch( mmr )
{
case MMSYSERR_NOERROR:
break; // success!
case MMSYSERR_INVALPARAM:
assert( !"Invalid parameters passed to acmStreamOpen" );
return E_FAIL;
case ACMERR_NOTPOSSIBLE:
assert( !"No ACM filter found capable of decoding WMA" );
return E_FAIL;
default:
assert( !"Some error opening ACM decoding stream!" );
return E_FAIL;
}
// WMA stream converter opened correctly
// now, let's open a file, read in a bunch of WMA data, and convert it!
// open file
FILE *fpIn = fopen( SOURCE_WMA, "rb" );
if( fpIn == NULL )
{
assert( !"can't open input WMA file!" );
return E_FAIL;
}
// find out how big the decompressed buffer will be
unsigned long rawbufsize = 0;
mmr = acmStreamSize( g_wmastream, WMA_BLOCK_SIZE, &rawbufsize, ACM_STREAMSIZEF_SOURCE );
assert( mmr == 0 );
assert( rawbufsize > 0 );
// allocate our I/O buffers
LPBYTE wmabuf = (LPBYTE) LocalAlloc( LPTR, WMA_BLOCK_SIZE );
LPBYTE rawbuf = (LPBYTE) LocalAlloc( LPTR, rawbufsize );
// prepare the decoder
ACMSTREAMHEADER wmastreamHead;
ZeroMemory( &wmastreamHead, sizeof(ACMSTREAMHEADER ) );
wmastreamHead.cbStruct = sizeof(ACMSTREAMHEADER );
wmastreamHead.pbSrc = wmabuf;
wmastreamHead.cbSrcLength = WMA_BLOCK_SIZE;
wmastreamHead.pbDst = rawbuf;
wmastreamHead.cbDstLength = rawbufsize;
mmr = acmStreamPrepareHeader( g_wmastream, &wmastreamHead, 0 );
assert( mmr == 0 );
// let's dump this data off to disk (for debug checking!)
FILE *fpOut = fopen( OUTPUT_PCM_FILE, "wb" );
if( fpOut == NULL )
{
assert( !"can't open output PCM file!" );
return E_FAIL;
}
while(1)
{
// suck in some WMA data
int count = fread( wmabuf, 1, WMA_BLOCK_SIZE, fpIn );
if( count != WMA_BLOCK_SIZE )
break;
// convert the data
mmr = acmStreamConvert( g_wmastream, &wmastreamHead, ACM_STREAMCONVERTF_BLOCKALIGN );
switch( mmr )
{
case 0:
break; // success!
case ACMERR_BUSY:
printf( "acmStreamConvert FAILED\n" );
return E_FAIL;
case ACMERR_UNPREPARED:
printf( "acmStreamConvert FAILED\n" );
return E_FAIL;
case MMSYSERR_INVALFLAG:
printf( "acmStreamConvert FAILED\n" );
return E_FAIL;
case MMSYSERR_INVALHANDLE:
printf( "acmStreamConvert FAILED\n" );
return E_FAIL;
case MMSYSERR_INVALPARAM:
printf( "acmStreamConvert FAILED\n" );
return E_FAIL;
default:
assert( !"Some error opening ACM decoding stream!" );
return E_FAIL;
break;
}
// write the decoded PCM to disk
count = fwrite( rawbuf, 1, wmastreamHead.cbDstLengthUsed, fpOut );
assert( count == (int)wmastreamHead.cbDstLengthUsed );
};
// clean up after yourself like a good little boy
fclose( fpIn );
fclose( fpOut );
mmr = acmStreamUnprepareHeader( g_wmastream, &wmastreamHead, 0 );
assert( mmr == 0 );
LocalFree(rawbuf);
LocalFree(wmabuf);
mmr = acmStreamClose( g_wmastream, 0 );
assert( mmr == 0 );
return S_OK;
}
void main()
{
convertWMA();
} |