2017-03-25 10 views
1

私はモールスコードのオーディオデコーダを作成し、マイクを通してモールスコードのオーディオ入力を受け、それを英語にデコードして、Pythonを使用します。今私の優先事項は、ディットとダーを認識できることです。の振幅を取得する0.01秒間隔 Pythonを使用したモールスのオーディオデコード

  • でオーディオサンプルを取り

    1. :コード/ターゲットの

      import pyaudio 
      import struct 
      import math 
      from datetime import datetime 
      
      thresh = 0.002 
      sample_period = 0.01 
      RATE = 44100 
      sample_cycles = int(RATE*sample_period) 
      SHORT_NORMALIZE = (1.0/32768.0) 
      
      CHANNELS = 2 
      FORMAT=pyaudio.paInt16 
      
      def rms(sample): 
          count = len(sample)/2 
          format = "%dh"%(count) 
          shorts = struct.unpack(format, sample) 
      
          sum_squares = 0.0 
          for i in shorts: 
      
           n = i * SHORT_NORMALIZE 
           sum_squares += n*n 
      
          return math.sqrt(sum_squares/count) 
      
      pa=pyaudio.PyAudio() 
      
      
      stream = pa.open(format = FORMAT,      
           channels = CHANNELS,       
           rate = RATE,         
           input = True,         
           frames_per_buffer = sample_cycles) 
      
      
      thresh_final=thresh 
      list1="" 
      counter=0 
      for i in range(1000): 
          try: 
           sample=stream.read(sample_cycles) 
          except IOError: 
           print("Error Recording") 
      
          amp=rms(sample) 
      
          if amp>thresh: 
           list1+="1" 
          else: 
           list1+="0" 
      list1=list1.split("0") 
      print(list1) 
      for i in range(len(list1)): 
          if len(list1[i])==45: 
           print ("Dah") 
          elif len(list1[i])==15: 
           print("Dit") 
      

      クイック概要:私はデコーダのこの部分にアプローチしようとした方法は以下の通りですサンプルをRMS

    2. 0.01sサンプルの振幅がビープ音またはノーならば認識できるように設定されている場合、文字列に '1'を追加します。その他 '0'
    3. 文字列を0からリストに追加します(ビープ音の間のギャップになります)
    4. サブリストの長さが15の場合は15(15 * 0.01s = 0.15s、これは私が使用している時間ですdahs)プリント「DIT」、そしてあなたが言うことができるように、これは効率的であったので、私はモールス符号オーディオに取り組むことができる方法のように何か提案していないサブリストの長さは= 45印刷「ダー」

    場合デコード?別のポストに影響を受け

    コード:Detect tap with pyaudio from live mic

  • 答えて

    0

    あなたはまだ答えを探している場合は、私がpythonベースのライブラリがtext.wavモールスコードファイルを変換morse-to-text - defaultと呼ばれました。

    mp3がある場合は、最初にwavに変換してください。
    pythonwave,ffmpegまたは外部ラッパーライブラリpydubを組み込むことができます。
    以下は、非常に使いやすいようにpydubを使用した例です。モールスコードファイルがwavに変換され

    from pydub import AudioSegment 
    
    codefile_mp3 = "sampleMorseCode.mp3" 
    codefile_wav = "sampleMorseCode.wav" 
    mcode = AudioSegment.from_mp3(codefile_mp3) 
    mcode.export(codefile_wav , format="wav") 
    

    たら、次のようにmorse-to-text.pyコマンドラインを実行し、またはPythonスクリプト内呼び出すことができます。

    C:\morse-to-text>morse-to-text.py sampleMorseCode.wav 
    

    出力:

    .-.. .- | .-. . ... .--. ..- . ... - .- | -.. . | . ... - . | -. .. ...- . .-.. 
    | . ... | .- .-.. ..-. .-. . -.. | ...- .- .. .-.. 
    LA RESPUESTA DE ESTE NIVEL ES ALFRED VAIL 
    

    あなたが興味を持っている場合にも(そのようspectrogramfftfrequencyfilterなどとして信号に大量のデータを生成

    Usage: C:\morse-to-text\morse-to-text.py soundfile.wav [--report[=pdf|=png]] 
    

    私はちょうどました。 Webからのサンプルのモールスコードファイルです。したがって、英語ではありません。
    これは役に立ちます。

    関連する問題