ตั้งแต่วันที่ 27 มีนาคม 2025 เป็นต้นไป เราขอแนะนำให้ใช้ android-latest-release
แทน aosp-main
เพื่อสร้างและมีส่วนร่วมใน AOSP โปรดดูข้อมูลเพิ่มเติมที่หัวข้อการเปลี่ยนแปลงใน AOSP
อินพุตไมโครโฟน
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
เมื่อบันทึกเสียง HAL เสียงจะได้รับการเรียก openInputStream
ที่มีอาร์กิวเมนต์ AudioSource
เพื่อระบุวิธีประมวลผลอินพุตไมโครโฟน
แหล่งที่มา VOICE_RECOGNITION
ต้องการสตรีมไมโครโฟนสเตอริโอที่มีเอฟเฟกต์การตัดเสียงสะท้อน (หากมี) แต่ไม่มีการประมวลผลอื่นๆ
หากต้องการบันทึกเสียงจากอุปกรณ์ที่มีมากกว่า 2 ช่อง (สเตอริโอ) ให้ใช้มาสก์ดัชนีช่องแทนมาสก์ดัชนีตำแหน่ง (เช่น CHANNEL_IN_LEFT
) ตัวอย่างเช่น
final AudioFormat audioFormat = new AudioFormat.Builder()
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setSampleRate(44100)
.setChannelIndexMask(0xf /* 4 channels, 0..3 */)
.build();
final AudioRecord audioRecord = new AudioRecord.Builder()
.setAudioFormat(audioFormat)
.build();
audioRecord.setPreferredDevice(someAudioDeviceInfo);
เมื่อตั้งค่าทั้ง setChannelMask
และ setChannelIndexMask
แล้ว AudioRecord
จะใช้เฉพาะค่าที่ setChannelMask
กำหนด (สูงสุด 2 แชแนล)
การจับภาพพร้อมกัน
ตั้งแต่ Android 10 เฟรมเวิร์ก Android รองรับการบันทึกอินพุตพร้อมกัน แต่มีข้อจำกัดเพื่อปกป้องความเป็นส่วนตัวของผู้ใช้ ข้อจำกัดเหล่านี้ทำให้ระบบละเว้นแหล่งที่มาเสมือน เช่น AUDIO_SOURCE_FM_TUNER
และอนุญาตให้จับภาพพร้อมกันกับอินพุตปกติ (เช่น ไมโครโฟน)
HwAudioSource
จะไม่ถือว่าเป็นส่วนหนึ่งของข้อจำกัดการจับภาพพร้อมกัน
แอปที่ออกแบบมาให้ทำงานกับอุปกรณ์ AUDIO_DEVICE_IN_BUS
หรืออุปกรณ์ AUDIO_DEVICE_IN_FM_TUNER
รองต้องอาศัยการระบุอุปกรณ์เหล่านั้นอย่างชัดเจนและใช้ AudioRecord.setPreferredDevice()
เพื่อข้ามตรรกะการเลือกแหล่งที่มาเริ่มต้นของ Android
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-07-09 UTC
[[["เข้าใจง่าย","easyToUnderstand","thumb-up"],["แก้ปัญหาของฉันได้","solvedMyProblem","thumb-up"],["อื่นๆ","otherUp","thumb-up"]],[["ไม่มีข้อมูลที่ฉันต้องการ","missingTheInformationINeed","thumb-down"],["ซับซ้อนเกินไป/มีหลายขั้นตอนมากเกินไป","tooComplicatedTooManySteps","thumb-down"],["ล้าสมัย","outOfDate","thumb-down"],["ปัญหาเกี่ยวกับการแปล","translationIssue","thumb-down"],["ตัวอย่าง/ปัญหาเกี่ยวกับโค้ด","samplesCodeIssue","thumb-down"],["อื่นๆ","otherDown","thumb-down"]],["อัปเดตล่าสุด 2025-07-09 UTC"],[],[],null,["# Microphone input\n\nWhen capturing audio, the Audio HAL receives an `openInputStream` call that\nincludes an `AudioSource` argument to indicate how microphone input should be\nprocessed.\n\nThe `VOICE_RECOGNITION` source expects a stereo microphone stream that has an\necho cancellation effect (if available) but no other processing applied to it.\n\nMulti-channel microphone input\n------------------------------\n\nTo capture audio from a device with more than two channels (stereo), use a\nchannel index mask instead of positional index mask (such as `CHANNEL_IN_LEFT`).\nFor example: \n\n final AudioFormat audioFormat = new AudioFormat.Builder()\n .setEncoding(AudioFormat.ENCODING_PCM_16BIT)\n .setSampleRate(44100)\n .setChannelIndexMask(0xf /* 4 channels, 0..3 */)\n .build();\n final AudioRecord audioRecord = new AudioRecord.Builder()\n .setAudioFormat(audioFormat)\n .build();\n audioRecord.setPreferredDevice(someAudioDeviceInfo);\n\nWhen both `setChannelMask` and `setChannelIndexMask` are set, `AudioRecord` uses\nonly the value set by `setChannelMask` (maximum of two channels).\n\nConcurrent capture\n------------------\n\nAs of Android 10, the Android framework supports\n[Concurrent capture](/docs/core/audio/concurrent) of inputs, but with\nrestrictions to protect the user's privacy. As part of these restrictions,\nvirtual sources such as `AUDIO_SOURCE_FM_TUNER` are ignored, and are allowed to\nbe captured concurrently along with a regular input (such as the microphone).\n`HwAudioSource` is not considered part of the concurrent capture restrictions.\n\nApps designed to work with `AUDIO_DEVICE_IN_BUS` devices or with secondary\n`AUDIO_DEVICE_IN_FM_TUNER` devices must rely on explicitly identifying those\ndevices and using `AudioRecord.setPreferredDevice()` to bypass the Android\ndefault source selection logic."]]