рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдСрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ

рдкрд░рд┐рдЪрдп


рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рд╕реЗ рдХрдЪреНрдЪрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдЧ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ android.media.AudioRecord android.media.AudioRecord ред рдпрд╣ рдЖрдВрддрд░рд┐рдХ рдмрдлрд░ рдХреЛ рдбреЗрдЯрд╛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдореЗрдВ рд╕рдордп-рд╕рдордп рдкрд░ рдЗрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдбрд┐рдЬрд╛рдЗрдирд░

рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
audioSourceрд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд╣рд╛рдБ рд╕реЗ рд╣реИ? рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ MediaRecorder.AudioSource.MIC
sampleRateInHzрд╣рд░реНрдЯреНрдЬ рдирдореВрдирд╛ рджрд░ред рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ 44100Hz рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ
channelConfigрдЪреИрдирд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ CHANNEL_IN_MONO CHANNEL_IN_MONO рдпрд╛ CHANNEL_IN_STEREO CHANNEL_IN_STEREO рдореЛрдиреЛ рд╣рд░ рдЬрдЧрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдорд╣рддреНрд╡рдкреВрд░реНрдг: рдпреЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдЙрди рдЪреИрдирд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рдЬрд┐рдиреНрд╣реЗрдВ рд╡реЗ рдирд┐рд░реВрдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ 1 рдпрд╛ 2 рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
audioFormatрдПрдХ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк, рдЬрд┐рд╕реЗ рдПрдХ рдХреЛрдбреЗрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ENCODING_PCM_16BIT ENCODING_PCM_16BIT рдпрд╛ ENCODING_PCM_8BIT
bufferSizeInBytesрдЙрд╕реА рдЖрдВрддрд░рд┐рдХ рдмрдлрд░ рдХрд╛ рдЖрдХрд╛рд░ред рдЗрд╕рд╕реЗ рдЖрдк рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдкрдврд╝рдиреЗ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдЖрдХрд╛рд░ рдЗрд╕ рдореВрд▓реНрдп рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдиреНрдпреВрдирддрдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рдореВрд▓реНрдп рд╣реИ, рдЬрд┐рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ getMinBufferSize() getMinBufferSize() ред

рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди, рдПрдХ рд╡рд╕реНрддреБ рд╕рд┐рд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреА рд╣реИ рдЬреЛ рдЙрд╕реЗ рдЪрд╛рд╣рд┐рдПред рд╡рд╣ рдХрд┐рддрдиреА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдлрд▓ рд╣реБрдИ, рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдкрддрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ getState() getState() ред рдЕрдЧрд░ рд╡рд╣ рд▓реМрдЯрддреА рд╣реИ STATE_INITIALIZED STATE_INITIALIZED , рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рдпрджрд┐ STATE_UNINITIALIZED STATE_UNINITIALIZED рдЕрд░реНрде рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд╣реИред

рддреНрд░реБрдЯрд┐ рдХреЗ рджреЛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рдПрдХ рдмрдлрд░ рдЬреЛ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдорд╛рдиреНрдп рдкреНрд░рд╛рд░реВрдк рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ getMinBufferSize() рдХреЙрд▓ рдХрд░рдХреЗ рдЗрд╕рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рджреВрд╕рд░рд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ред

getMinBufferSize ()

рдпрд╣ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдЖрдВрддрд░рд┐рдХ рдмрдлрд░ рдХреЗ рдиреНрдпреВрдирддрдо рдЖрдХрд╛рд░ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреА рд╣реИ рдЬрд┐рд╕ рдкрд░ AudioRecord рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рд╡рд╣реА рдЕрд░реНрде рд╣реИ рдЬреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╕рд┐рд╕реНрдЯрдо рдЕрднреА рднреА рдХреБрдЫ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╕реНрдд рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЕрднреА рднреА рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдЫреЗрдж рд╣реЛрдВрдЧреЗред рдореБрдЭреЗ рджрд╕ рдЧреБрдирд╛ рдмрдбрд╝рд╛ рдЖрдХрд╛рд░ рд▓реЗрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рдорд┐рд▓реАред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк

getMinBufferSize() рдкрджреНрдзрддрд┐ рдХреА рдПрдХ рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ - рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдорд╛рдиреНрдп рд╣реИрдВ , рдЬреЛ рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдорд╛рдиреНрдп рд╣реИрдВ, ERROR_BAD_VALUE ERROR_BAD_VALUE рдпрд╛ ERROR ERROR ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рд╕рдВрднрд╡ рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЖрдк рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд┐рд╕ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
 int[] rates = {8000, 11025, 22050,44100, 48000, 96000 }; int[] chans = {AudioFormat.CHANNEL_IN_MONO, AudioFormat.CHANNEL_IN_STEREO}; int[] encs = {AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_16BIT}; for(int enc : encs) { for(int ch : chans) { for(int rate : rates) { int t = AudioRecord.getMinBufferSize(rate, ch, enc); if((t != AudioRecord.ERROR) && (t != AudioRecord.ERROR_BAD_VALUE)) { //   } } } } 


рдбреЗрдЯрд╛ рд░реАрдбрд┐рдВрдЧ

рдЖрдВрддрд░рд┐рдХ рдмрдлрд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ read() read() ред рдпрд╣ рддреАрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ:рдЙрдирдХреЗ рдкреИрд░рд╛рдореАрдЯрд░:
audioDataрд╕рд░рдгреА рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛
audioBufferрдмрдлрд░ рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛
рдСрдлрд╕реЗрдЯрдмрд╛рдЗрдЯ /
offsetInShorts
рдЬрд┐рд╕ рдкрд░ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧреА
sizeInShortsрдЕрдиреБрд░реЛрдзрд┐рдд рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рдХрд╛ рдЖрдХрд╛рд░ред рдмрд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдмрд╛рдЗрдЯ рдФрд░ byte[] , рд╢реЙрд░реНрдЯ рдХреЗ рд▓рд┐рдП short[] рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ short[]

рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдкрдврд╝реА рдЧрдИ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧреА, рдЕрдЧрд░ рдпрд╣ ByteBuffer рдпрд╛ byte[] рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдпрд╛ short[] рд▓рд┐рдП short[] рдкреВрд░реНрдгрд╛рдВрдХ рдкрдврд╝реЗрдВред рдпрджрд┐ рдХреЙрд▓ рдХреЗ рд╕рдордп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╡рд╣ ERROR_INVALID_OPERATION рд▓реМрдЯреЗрдЧрд╛ , рдФрд░ рдпрджрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ - ERROR_BAD_VALUE

рдорд╣рддреНрд╡рдкреВрд░реНрдг: рд╡рд┐рдзрд┐ рдХреЙрд▓рд┐рдВрдЧ рдереНрд░реЗрдб рдХреЛ рддрдм рддрдХ рдмреНрд▓реЙрдХ рдХрд░рддреА рд╣реИ рдЬрдм рддрдХ рд╡рд╣ рдбреЗрдЯрд╛ рдХреА рдЕрдиреБрд░реЛрдзрд┐рдд рдорд╛рддреНрд░рд╛ рдХреЛ рдирд╣реАрдВ рдкрдврд╝ рд▓реЗрддреА рд╣реИред рдпрджрд┐ рдЖрдВрддрд░рд┐рдХ рдмрдлрд░ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рд╕реЗ рдЖрдиреЗ рддрдХ read() рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рдЯрдХрд╛рдПрдЧрд╛ред

рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдкреАрдЫреЗ рд╣рдЯрдирд╛, рдирд┐рд░реНрдзрд╛рд░рдг

рддрд╛рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдорд╛рдЗрдХреНрд░реЛрдлреЛрди рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗ, рдЖрдкрдХреЛ AndroidManifest, xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 <uses-permission android:name="android.permission.RECORD_AUDIO" /> 

рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ startRecording() startRecording() , рдФрд░ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - stop() stop() ред рдЖрдк рдЬрд┐рддрдиреА рдмрд╛рд░ рдЪрд╛рд╣реЗрдВ рдЙрддрдиреА рдмрд╛рд░ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╢реБрд░реВ рдФрд░ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП release() release() ред рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рдХрд░реЗрдЧрд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдЪрд░ рдХреЛ null рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдорд╣рддреНрд╡рдкреВрд░реНрдг: рдпреЗ рддреАрди рд╡рд┐рдзрд┐рдпрд╛рдВ, рдЬреЛ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рд╣реИрдВ, рдХреЗ рд╡рд┐рдкрд░реАрдд, рдлреЗрдВрдХ рджреЗрдВрдЧреЗ IllegalStateException IllegalStateException , рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд╕рдВрдЧрдард┐рдд (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рд╢рдмреНрдж ... :) рд╡рд╕реНрддреБ рдпрд╛ рдЧрд▓рдд рдХреНрд░рдо рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ "рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ" рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд try рдмреНрд▓реЙрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред

рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд░реНрдЧ рд╡рд╣ рд╕рдм рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╣ рдЙрд╕рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рднреЗрдЬрддрд╛ рд╣реИ Handler рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Handler рд╕рдВрджреЗрд╢ред рдпрд╣ рдбреЗрдЯрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдереНрд░реЗрдб рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП, рдЙрди рдбреЗрдЯрд╛ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрднреА рддрдХ рдирдП рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ, рдПрдХ рдкрд░рд┐рдкрддреНрд░ рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреЛрдб AudioFormatInfo рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рддреАрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ POJO рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: sampleRateInHz , channelConfig рдФрд░ audioFormat ред
 package com.MyCompany; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; import android.os.Handler; import android.os.Process; //AudioFormatInfo - POJO   sampleRateInHz, channelConfig  audioFormat public class AudioReciever implements Runnable { private boolean mIsRunning; private List<Handler> handlers; private AudioFormatInfo format; private AudioRecord mRecord; private final int BUFF_COUNT = 32; public AudioReciever(AudioFormatInfo format) { this.format = format; handlers = new ArrayList<Handler>(); mIsRunning = true; mRecord = null; } public void addHandler(Handler handler) { handlers.add(handler); } public void stop() { mIsRunning = false; } @Override public void run() { //      Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_AUDIO); mIsRunning = true; int buffSize = AudioRecord.getMinBufferSize(format.getSampleRateInHz(), format.getChannelConfig(), format.getAudioFormat()); if(buffSize == AudioRecord.ERROR) { System.err.println("getMinBufferSize returned ERROR"); return; } if(buffSize == AudioRecord.ERROR_BAD_VALUE) { System.err.println("getMinBufferSize returned ERROR_BAD_VALUE"); return; } //    short,   16-bit if(format.getAudioFormat() != AudioFormat.ENCODING_PCM_16BIT) { System.err.println("unknown format"); return; } //   .    , //      short[][] buffers = new short[BUFF_COUNT][buffSize >> 1]; mRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, format.getSampleRateInHz(), format.getChannelConfig(), format.getAudioFormat(), buffSize * 10); if(mRecord.getState() != AudioRecord.STATE_INITIALIZED) { System.err.println("getState() != STATE_INITIALIZED"); return; } try { mRecord.startRecording(); } catch(IllegalStateException e) { e.printStackTrace(); return; } int count = 0; while(mIsRunning) { int samplesRead = mRecord.read(buffers[count], 0, buffers[count].length); if(samplesRead == AudioRecord.ERROR_INVALID_OPERATION) { System.err.println("read() returned ERROR_INVALID_OPERATION"); return; } if(samplesRead == AudioRecord.ERROR_BAD_VALUE) { System.err.println("read() returned ERROR_BAD_VALUE"); return; } //    sendMsg(buffers[count]); count = (count + 1) % BUFF_COUNT; } try { try { mRecord.stop(); } catch(IllegalStateException e) { e.printStackTrace(); return; } } finally { //   mRecord.release(); mRecord = null; } } private void sendMsg(short[] data) { for(Handler handler : handlers) { handler.sendMessage(handler.obtainMessage(MSG_DATA, data)); } } } 

Source: https://habr.com/ru/post/In137708/


All Articles