एएसी फ़ाइल के बीपीएम या एएसी को एमपी 3 - एएसी, ऑडियो प्रोसेसिंग में कनवर्ट करने के लिए किसी लाइब्रेरी का विश्लेषण कैसे करें

मैं आईफोन डेवलपर हूं और अब एक मैक एप्लीकेशन विकसित कर रहा हूं। मैक मंच में यह मेरी पहली परियोजना है।

मुझे गाने फ़ाइलों के बीपीएम का विश्लेषण करना है। मैंने एफएमओडी और साउंड टच लाइब्रेरी का उपयोग करके एमपी 3 के लिए यह काम किया है।

लेकिन मुझे एएसी (एम 4 ए) के लिए भी विश्लेषण करना है, लेकिन यह पुस्तकालय एएसी प्रारूप में समर्थन नहीं करता है।

मैंने एएसी (एम 4 ए) के लिए पुस्तकालय खोजने की कोशिश की और मुझे इसके लिए कोई चीज़ नहीं मिली। इसलिए यदि हम इस एएसी फ़ाइल को कोको में प्रोग्रामेटिक रूप से एमपी 3 फ़ाइल में परिवर्तित कर सकते हैं तो हम उस फ़ाइल के बीपीएम का विश्लेषण कर सकते हैं।

मैंने कोको में एएसी को एमपी 3 में परिवर्तित करने की कोशिश की और मुझे एफएएसी लाइब्रेरी मिली लेकिन कोको और इसके बहुत जटिल के साथ एकीकृत करने के लिए कोई दस्तावेज नहीं है।

कोको परियोजना में एएसी के लिए बीपीएम का विश्लेषण करने के लिए किसी को भी किसी अन्य पुस्तकालय के बारे में पता है।

बहुत बहुत शुक्रिया।

उत्तर:

जवाब के लिए 0 № 1

आप वर्तमान में साउंड टच का उपयोग कैसे कर रहे हैं? जब आप उन्हें पढ़ते हैं तो क्या आप ध्वनि टच लाइब्रेरी में ऑडियो नमूने पास करते हैं? या आप soundstretch उपयोगिता spawn और ऑडियो को एक फाइल के रूप में या एक पाइप के रूप में पास करते हैं?

मैं साउंड टच से परिचित नहीं हूं, लेकिन ऐसा लगता हैजैसे कि यह पीसीएम ऑडियो इनपुट के रूप में चाहता है, तो आप शायद पहले से ही पीसीएम में परिवर्तित हो रहे हैं। अगर आप उन्हें प्राप्त करते समय ऑडियो के नमूने को साउंड टच पास करना चाहते हैं, तो आप इस तरह कुछ का उपयोग करके एफएएसी के साथ डीकोड कर सकते हैं

#include <stdio.h>
#include <inttypes.h>
#include <faac.h>
#include <neaacdec.h>

#define SAMPLE_SIZE 2 //2 bytes, or 16bits per samle.

int AACDecode(uint8_t *aacData, size_t aacBytes, uint32_t sampleRate, unsigned char channels)
{
NeAACDecHandle decoder = NeAACDecOpen();
NeAACDecConfigurationPtr config = NeAACDecGetCurrentConfiguration(decoder);
NeAACDecFrameInfo info;
uint8_t *decoded = NULL;
uint8_t *readPtr = aacData;
int consumed = 0;

//If the AAC data is wrapped in ADTS, you don"t need the next 2 lines
//If it"s not wrapped in ADTS, you need to know sampleRate, and object type
//Object type is one of LOW, MAIN, SSR, LTP
config->defObjectType = LOW;
config->defSampleRate = sampleRate;
//If SoundTouch wants it in something other than siged 16bit LE PCM, change this
config->outputFormat = FAAD_FMT_16BIT;
if (!NeAACDecSetConfiguration(decoder, config))
{
printf("unable to set confign");
return 0;
}

if (NeAACDecInit(decoder, (unsigned char *)aacData, aacBytes, &sampleRate, &channels) < 0)
{
printf("unable to initn");
return 0;
}

do
{
decoded = (char *)NeAACDecDecode(decoder, &info, readPtr, aacBytes);
if (info.samples > 0)
{
size_t decodedBytes = (size_t)info.samples * SAMPLE_SIZE;
//Pass <decodedBytes> of PCM data, pointed to by <decoded> to soundTouch
}

consumed += info.bytesconsumed;
readPtr += info.bytesconsumed;
} while (info.error == 0 && consumed < aacBytes);

NeAACDecClose(decoder);
return 1;
}

आपको FAAD लाइब्रेरी के खिलाफ लिंक करने की आवश्यकता है

या यदि आप कमांड लाइन मार्ग पर जा रहे हैं, तो शायद कुछ ऐसा हो सकता है:

ffmpeg -i <input_file> raw.wav

raw.wav फिर soundstretch करने के लिए पारित किया जा सकता है


संबंधित सवाल
सबसे लोकप्रिय