相关疑难解决方法(0)

Android AudioRecord到服务器上的UDP播放问题

我正在尝试制作一个简单的Android应用程序,将实时麦克风音频流式传输到服务器进行播放.产生的播放听起来很奇怪,音频间隙很大.有谁知道我做错了什么?

编辑:解决了.结果我假设每个传入的缓冲区都会完全填满,这是我的错误假设.

这是我的活动:

public class MainActivity extends Activity {
    private static String TAG = "AudioClient";

    // the server information
    private static final String SERVER = "xx.xx.xx.xx";
    private static final int PORT = 50005;

    // the audio recording options
    private static final int RECORDING_RATE = 44100;
    private static final int CHANNEL = AudioFormat.CHANNEL_IN_MONO;
    private static final int FORMAT = AudioFormat.ENCODING_PCM_16BIT;

    // the button the user presses to send the audio stream to the server
    private Button sendAudioButton;

    // the audio recorder …
Run Code Online (Sandbox Code Playgroud)

audio streaming android audiorecord

17
推荐指数
1
解决办法
2万
查看次数

使用Android AudioRecorder录制.Wav

我已经阅读了很多关于Android的AudioRecorder的网页.您可以在问题下方看到它们的列表.

我正在尝试使用AudioRecorder录制音频,但效果不佳.

public class MainActivity extends Activity {

AudioRecord ar = null;
int buffsize = 0;

int blockSize = 256;
boolean isRecording = false;
private Thread recordingThread = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


}

public void baslat(View v)
{
            // when click to START 
    buffsize = AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
    ar = new AudioRecord(MediaRecorder.AudioSource.MIC, 44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, buffsize);

    ar.startRecording();

    isRecording = true;
    recordingThread = new Thread(new Runnable() {
        public void run() {
            writeAudioDataToFile();
        }
    }, "AudioRecorder Thread"); …
Run Code Online (Sandbox Code Playgroud)

android audiorecord

12
推荐指数
2
解决办法
3万
查看次数

AudioRecord - 如何将数据输入缓冲区?

我在使用AudioRecord类时遇到了一些问题.我想将记录的数据存储在缓冲区中,但我不确定实现它的正确方法是什么.我经历了大量的例子,但大多数都是复杂的,代表了许多不同的方法.我正在寻找简单或简单的解释.

以下是我的项目的音频设置:

int audioSource = AudioSource.MIC;
int sampleRateInHz = 8000;
int channelConfig = AudioFormat.CHANNEL_IN_MONO;
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
int bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat);

short[] buffer = new short[bufferSizeInBytes];

AudioRecord audioRecorder = new AudioRecord(audioSource,
                                            sampleRateInHz, 
                                            channelConfig, 
                                            audioFormat, 
                                            bufferSizeInBytes);
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建录音功能:

public void Recording() {
    audioRecorder.startRecording();
    ...
    audioRecorder.stop();
    audioRecorder.release();
}
Run Code Online (Sandbox Code Playgroud)

我知道我应该使用.read(short [] audioData,int offsetInShorts,int sizeInShorts)函数.在这里我的问题开始了.我不确定audioData缓冲区是如何工作的 - 我假设函数将记录的样本放入audioData中.如果它完全充满数据会发生什么?它从最早的位置开始重写?如果确实如此,我相信我必须将所有收集的样本复制到其他地方.它提出了另一个问题 - 如何检查.read(...)函数缓冲区是否已满?我是否需要测量时间和复制缓冲区内容,还是有另一种方法可以实现这一目标?我还需要为整个录制操作创建一个线程吗?

很抱歉在一个主题中问了这么多问题:)

android buffer

9
推荐指数
1
解决办法
8483
查看次数

语音录制时,语音识别无法正常工作

我正在开发一个功能,当按下按钮时,它将启动语音识别,同时记录用户说的内容.代码如下:

    button_start.setOnTouchListener( new View.OnTouchListener() 
    {
        @Override
        public boolean onTouch(View arg0, MotionEvent event) 
        {   
                if (pressed == false)
                {
                    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);        
                    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
                    intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,"voice.recognition.test");
                    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "zh-HK");
                    intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,1); 
                    sr.startListening(intent);
                    Log.i("111111","11111111");
                    pressed = true;
                }

                recordAudio();

            }

            if((event.getAction()==MotionEvent.ACTION_UP || event.getAction()==MotionEvent.ACTION_CANCEL))
            {                   
                stopRecording();
            }
            return false;
        }
    });             
}

   public void recordAudio()
   {
      isRecording = true;   
      try 
      {
          mediaRecorder = new MediaRecorder();
          mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
          mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
          mediaRecorder.setOutputFile(audioFilePath);
          mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
          mediaRecorder.prepare();
      } 
      catch (Exception e) 
      {
          e.printStackTrace();
      }
      mediaRecorder.start();            
   }    

   public void stopRecording()
   {            
       if (isRecording) …
Run Code Online (Sandbox Code Playgroud)

android voice-recording voice-recognition mediarecorder

8
推荐指数
1
解决办法
1937
查看次数

Android AudioRecord read总是返回-3(ERROR_INVALID_OPERATION)

我已经尝试将代码简化为最低限度,但它仍然无效:

public class MainActivity extends AppCompatActivity {

AudioRecord rec;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    rec=  new AudioRecord(MediaRecorder.AudioSource.MIC,44100, AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT,8192);

    short buff[] = new short[8192];
    int read = rec.read(buff,0,buff.length);
    System.out.print(read);
}
Run Code Online (Sandbox Code Playgroud)

无论如何,总是返回-3.我错过了什么?

java android audiorecord

8
推荐指数
1
解决办法
1473
查看次数

如何在没有外部库的情况下从USB麦克风录制高质量音频

我正在努力如何从连接的USB麦克风捕获音频流.我曾尝试使用MediaCapturewith MediaRecorder.AudioSource.MIC作为源,但录音质量对我来说并不是很有用,你无法确定音频源是USB还是内置设备麦克风.我需要的是使用USB音频功能,但到目前为止我无法取得任何进展.

使用第三方库对我来说太过分了,因为我只需要从麦克风接收音频数据流,其余的处理工作已经完成并正常工作,只有音频源是问题.

我需要做的是:

  1. 检查设备是否连接了USB麦克风.
  2. 了解该设备的特性(支持采样率,通道等)
  3. 录制音频数据

到目前为止我做了什么:

生成一个连接的USB设备列表 UsbConstants.USB_CLASS_AUDIO

private static final String ACTION_USB_PERMISSION = PACKAGE_NAME  + ".USB_PERMISSION";
private UsbManager mUsbManAndroid;
private Map<String, UsbDevice> mAndroidDeviceMap;
private PendingIntent mPermissionIntent;

private ArrayList<UsbDeviceListItem> getUSBDevicesList() {
    // Enumerate USB devices
    mAndroidDeviceMap = mUsbManAndroid.getDeviceList();
    ArrayList<UsbDeviceListItem> usbDevicesList = new ArrayList<>();

    for (String key : mAndroidDeviceMap.keySet()) {
        UsbDevice device = mAndroidDeviceMap.get(key);

        // Check the device class
        if (device.getDeviceClass() == UsbConstants.USB_CLASS_AUDIO) {
            usbDevicesList.add(usbDeviceToListItem(key, device));
        } else if (device.getDeviceClass() == UsbConstants.USB_CLASS_PER_INTERFACE) {
            UsbInterface interface;
            for …
Run Code Online (Sandbox Code Playgroud)

audio usb android android-studio android-usb

5
推荐指数
0
解决办法
1399
查看次数