Gracias por tomarse un tiempo para leer mi pregunta.Archivo de audio sin procesar a AAC con Windows Media Foundation en Windows 7
Estoy desarrollando una aplicación C++ utilizando Qt y Windows API.
Estoy grabando la salida del micrófono en archivos de audio de 10s pequeños en formato raw, y quiero convertirlos a formato aac.
He intentado leer tantas cosas como pude, y pensé que sería una gran idea comenzar desde la API de transcodificación de Windows Media Foundation.
El problema es que parece que no puedo usar un archivo .raw o .pcm en la función "CreateObjectFromUrl", por lo que estoy bastante atrapado aquí por el momento. Sigue fallando. El código de retorno hr es igual a 3222091460. He intentado pasar un archivo .mp3 a la función y, por supuesto, funciona, por lo que no ha habido ninguna falla url-humana.
MF_OBJECT_TYPE ObjectType = MF_OBJECT_INVALID;
IMFSourceResolver* pSourceResolver = NULL;
IUnknown* pUnkSource = NULL;
// Create the source resolver.
hr = MFCreateSourceResolver(&pSourceResolver);
if (FAILED(hr))
{
qDebug() << "Failed !";
}
// Use the source resolver to create the media source.
hr = pSourceResolver->CreateObjectFromURL(
sURL, // URL of the source.
MF_RESOLUTION_MEDIASOURCE, // Create a source object.
NULL, // Optional property store.
&ObjectType, // Receives the created object type.
&pUnkSource // Receives a pointer to the media source.
);
El MFCreateSourceResolver funciona bien, pero no CreateObjectFromURL éxito :(
Así que tengo dos preguntas para usted gente:
- ¿Es posible codificar archivos de audio crudos a los archivos AAC utilizando Windows Media Foundation?
- En caso afirmativo, ¿qué debo leer para lograr lo que quiero?
Quiero señalar que no puedo usar ffmpeg o libav simplemente porque no puedo pagar ninguna licencia para mi software, y no quiero que esté bajo la licencia GPL. Pero si hay alternativas a los fundamentos de Windows Media para codificar archivos de audio en bruto en aac, me gustaría escucharlos.
Y, por último, disculpe mi mal inglés, obviamente este no es mi idioma materno y lamento que haya hecho sangrar sus ojos. (Y feliz si me hizo reír)
tenga un buen día
Hola Roman y muchas gracias por tu respuesta. Lo dejó muy claro, y no puedo agradecerte lo suficiente por tu tiempo. Iré con el AAC Encoder de WMF para obtener AAC sin procesar y ver qué puedo hacer a partir de ahí. Si puedo pedirte otros 2 minutos de tu conocimiento, ya que soy casi un principiante en la codificación de audio ... Parece que no puedo encontrar ningún ejemplo de código que me ayude sobre qué pasos debo seguir para transformar pcm en aac. Según tengo entendido ahora, gracias a usted, necesito crear una interfaz IMFTransform, establecer la entrada en bruto y aac de salida, establecer la duración de la muestra y llamar a ProcessOutput. ¿Es así de simple? –
Desafortunadamente no conozco un buen código de muestra de referencia. Sin embargo, solía tenerlo funcionando en el pasado, así que sé que funciona bien. Sí, lo que básicamente necesita es seguir [AAC Encoder] (http://msdn.microsoft.com/library/dd742785%28v=vs.85%29.aspx) y crear una instancia de la clase MFT, establecer el tipo de medio de entrada, establecer la salida tipo de medio (¡cuidadosamente!), luego inserte datos PCM con 'ProcessInput' y extraiga datos AAC con' ProcessOutput'. –