Audio Record pomocí Android NDK

hlasů
2

Snažím se zaznamenat zvuk pomocí android NDK. lidé říkají, že mohu použít rámců / base / media / libmedia / AudioRecord.cpp. ale to je v jádře. Jak mohu získat přístup a využít ji?

Položena 21/07/2010 v 09:04
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
8

C ++ libmedia knihovna není součástí veřejného API. Někteří lidé používají to, ale je to velmi znechucený, protože by to mohlo zlomit na některých zařízeních a / nebo v některé z budoucích verzí systému Android.

Vyvinul jsem zvukový záznam aplikace, a věřte mi, audio podpora je velmi konzistentní napříč různými zařízeními, je to velmi složité , takže IMO pomocí libmedia přímo je špatný nápad.

Jediný způsob, jak zachytit surový zvuk s veřejným API je použít Java AudioRecord třídu. Bude vám dává PCM data, která pak můžete umístit přechází na jednotce C optimalizovány rutiny.

Alternativně, i když to je trochu těžší, mohli byste napsat C / C ++ wrapper kolem třídy Java AudioRecord, jak je to možné instance Java objektů a volání metod přes JNI.

Odpovězeno 21/07/2010 v 13:16
zdroj uživatelem

hlasů
4

Může být trochu, trochu zastaralé, ale:

  1. nejbezpečnější způsob hraní / nahrávání zvuku v nativním kódu je pomocí OpenSL es rozhraní. Přesto, že je k dispozici pouze na Android 2.3 nebo vyšší a nyní pracuje přes generické AudioFlinger API.

  2. čím více robustní a jednoduchý způsob, jak se pomocí platformy zdrojové kódy dostat AudioFlinger záhlaví a některé generické libmedia.so používané pro propojení na sestavení jevišti. Závislé na zařízení libmedia.so třeba předem na aplikační inicializační fázi pro AudioFlinger normálně pracovat (obvykle se to dělá automaticky). Vezměte na vědomí, že někteří prodejci se snaží měnit AudioFlinger vestavby (nejasnými důvodů), takže se může setkat s určitými problémy s pamětí či chování.

Podle mých zkušeností AudioFlinger pracoval na všech (2.0+), zařízení, ale někdy potřeba přidělení více paměti pro objekt, než se předpokládalo ve výchozím nastavení implementace.

Nakonec řekl OpenSL ES je obálka s dynamicky zatížitelné C-rozhraní, které umožňuje jeho použití na konkrétní implementaci AudioFlinger. Je to docela složité pro jednoduché použití, a mohou mít ještě větší režii než pomocí Java AudioTrack / AudioRecord kvůli vnitřním závitem, ukládání do vyrovnávací paměti, atd .. Takže zvážit použití Java nebo ne-tak-safe nativní AudioFlinger do Google implementuje nějakou vysoce výkonný zvuk interface (což je pochybné, pro tuto chvíli).

Odpovězeno 12/01/2012 v 13:33
zdroj uživatelem

hlasů
2

OpenSL Es API je k dispozici na Android 2.3 na (API-Level 9)

Odpovězeno 28/02/2012 v 12:42
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more