Eu estou tentando abrir um arquivo OggVorbis usando o Vorbis SDK / DLLs. ov_open()
lança uma exceção de violação de access 0x00000014
ov_open()
. Eu verifiquei o arquivo existe: eu abri com fopen
e imprimi o conteúdo para o console apenas para verificar – tudo correu bem!
Pode não fazer uma diferença, mas as DLLs foram compiladas como DEBUG Win32 , e meu projeto está compilando na mesma configuração.
Eu estou usando um caminho absoluto para o arquivo, por garantia, e o arquivo existe. Como dito anteriormente, posso abrir e ler sozinho.
O arquivo * .ogg foi renderizado usando o FL Studio a 192kbps, e também é aberto e reproduzido bem no Adobe Audition e no VLC Media Player.
Este é o código que eu tenho para abrir o arquivo e enviá-lo para a biblioteca Vorbis (o código veio deste tutorial):
FILE* oggFile; const char* path = "C:\\absolute\\path\\to\\file.ogg"; const char* openMode = "rb"; int result; if (!(oggFile = fopen(path, openMode))) { throw std::string("Could not open file."); } if ((result = ov_open(oggFile, &oggStream, NULL, 0)) < 0) { // Never gets here fclose(oggFile); throw std::string("Could not open Ogg stream: "); }
O código “Vorbis” onde a exceção é lançada:
// vorbisfile.c: line #827 static int _fseek64_wrap(FILE *f,ogg_int64_t off,int whence) { if(f==NULL)return(-1); return fseek(f,off,whence); // Exception thrown here }
Neste momento, off == 0
e whence == 1
.
Eu vejo o nome do método contém “64”. Isso poderia estar querendo ler um arquivo codificado de 64 bits? Ou ele está tentando rodar como 64 bits quando na verdade é compilado como 32 bits? Ou esta não é a questão de todo? : P
Além disso, como eu segui o tutorial, notei que havia alguns erros no código que eu tinha que corrigir. Então, eu estou querendo saber se o tutorial é “completo” o suficiente, ou seja: talvez haja alguma variável que eu deveria #define
, ou alguma outra coisa que está faltando antes de enviar o arquivo aberto para ov_open
para que ele seja tratado adequadamente.
Especificações técnicas:
_MSC_VER
1800 libogg.dll
v1.3.2 (atual) libvorbis.dll
v1.3.5 (atual) NOTA: O código-fonte Vorbis baixado continha apenas os arquivos Solution e Project até o VS2010. Eu abri as soluções VS2010 no Visual Studio Express 2013 para compilá-las, a fim de obter compatibilidade com o meu projeto. Eu também estou me perguntando se isso pode levar a alguns problemas.
A documentação do OggVorbis recomenda não usar ov_open no windows ( https://xiph.org/vorbis/doc/vorbisfile/ov_open.html ).
Use ov_open_callbacks em vez disso.
Algo como isso deve funcionar:
ov_open_callbacks(oggFile, &oggStream, NULL, 0, OV_CALLBACKS_DEFAULT);