【问题标题】:How to convert PCM samples from Microphone to bytes in react native如何在本机反应中将 PCM 样本从麦克风转换为字节
【发布时间】:2019-11-09 03:17:08
【问题描述】:

我正在开发 react-native 项目,该项目从麦克风读取音频样本并通过 websocket 发送以进行处理。我读取的样本格式如下 258、-403、-595、-740、-643、-595 ,-836,-1109,-1141,-1317,-1428,-1059,-804,-884,-980,-788,-451,-419,-387,-82,61,157,366,462,446,606,574,478,767,1038,1088,1216 ,1505,1617,1248,991,1007,751,494,398,221,-50,-419,-690,-788,-948,-1059,-1027,-980,-1027,-1141,-1075,-1093,- 1205,-996,-706,-435,-146,29,-162,-338,-178,-50,-162,-322,-499,-531,-306,-18,269,574,863,783,622,558,685,1022,1104, 1136,1070,815,606,348,205,61,-274,-611,-852,-884,-675,-595,-611,-483,-242,-66,0,269,430,269,269,398,430,269,125,333,253,-338,- ,-627,-371,-98,-146,0,205,109,189,285,366,430,414,382,173,205,414,382,13,-419,-353,-403,-627,-675,-722,-675,-900,-3,93,-932,- -772,-627,-611,-595,-451,-274,-162,-387,-242,-130,-322,-98,0,-34,237,462,526,462,526,799,895,991,1104,1200,1407,1537,1697 ,1697,1423,1328,1184,1070,799,221,-194,-531,-884,-996,-1043,-1189,-11 73,-1027,-916,-868,-980,-980,-868,-722,-531,-483,-515,-611,-595,-690,-900,-868,-932, -916,-804,-980,-1012,-788,-483,-114,45,45,29,253,478,382,348,510,767,1022,1054,1136,1296,1360,1136,1022,1216,1136,911,767,478

如果我将它们写入文件,它们会按原样写入。如何在将它们转储到文件之前转换它们,以便我以后可以用 Audacity 播放它?

【问题讨论】:

  • 你有什么解决办法吗?我也在尝试用 react native 来做到这一点
  • 还没有。我通过在 react-native-recording 模块的 RecordingModule.java 中进行了一些更改来解决此问题。
  • 如果可能的话,请分享一下。我的概念就像对讲机..如果我从另一端的一个设备说话,它会被听到..我正在通过 webSocket 发送数据
  • 能否提供你制作的文件
  • 我已经发布了答案,看看是否有帮助。

标签: javascript react-native websocket audio-recording microphone


【解决方案1】:

终于,我找到了办法。

class App extends React.Component {
  constructor(){
    super();
    this.state={
      status:true
    }

  }
  componentDidMount() {

    ws = new WebSocket('ws://192.168.0.2:1234');

    ws.onopen=()=>{
      console.log('Opened')
    }

    ws.onerror=(e)=>{
      console.log(e.message)
    }

    ws.onmessag=(e)=>{
      console.log(e.data);
    }
    ws.onclose=()=>{
      console.log('closed')
    }

    //Recording.start()

  }

  startVoice(){

    Recording.init({
      bufferSize: 640,
      sampleRate: 16000,
      bitsPerChannel: 16,
      channelsPerFrame: 1,
    })

    const listener = Recording.addRecordingEventListener(data => {

      //console.log(data)
      var view = new Uint16Array(data);
      ws.send(view);

    })

    Recording.start();
    this.setState({status:false});
  }

  stopVoice(){
    Recording.stop();
    this.setState({status:true});
  }

componentWillUnmount() {
    //Recording.stop()
  }

  render() {
    return(
        <View>
       {this.state.status?<Button title='start' onPress={()=>this.startVoice()}/>:<Button title='stop' onPress={()=>this.stopVoice()}/>}
       </View>
    )
  }
}

export default App;

【讨论】:

  • 非常感谢..你知道如何播放/收听我通过 WebSocket 发送的数据吗?
  • 如果您只是想验证,您可以将数据转储到另一端的文件中,稍后可以使用 Audacity 工具播放。如果你想使用 react-native 播放它,你可以检查现有的模块,如 react-native-pcm-audio .. 等
  • 是否可以将此 Unit16Array 转换为 base64,然后写入文件以检查文件是否可播放或什么?
猜你喜欢
  • 2019-12-07
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 2022-08-11
  • 1970-01-01
  • 2015-03-10
相关资源
最近更新 更多