こんな方におすすめ
- つぶやいた声をそのままツイッターに投稿したい
- 音声をwavに録音したい
- 音声を文字に変換したい
今回は、つぶやいた声をそのままダイレクトにツイッターに投稿するプログラムを作成しました。ツイート(つぶやく)という意味なので、リアルツイッターを実現するプログラムです。
音声を文字に変換する箇所以外は、これまで紹介してきた下記のプログラムを組み合わせるだけ実現することができます。
Google cloud platformの登録に関しては、下記を参照してください。また、APIを利用する前の環境設定は"テキスト読み上げ"ではなく、"音声入力"のドキュメントを参考してもらえれば、同様に設定ができます。
ツイッターへの投稿は、下記で使用しているソースをそのまま流用しています。
プログラムについて
今回は、以下の3つのプログラムの構成で音声文字変換からツイッターへの投稿を実現しています。
- 音声を録音してwavファイルに落とす
- wavファイルから文字に変換する
- 変換した文字をツイッターへ投稿する
まずは、音声を録音してwavファイルに落とす関数を作成します。MakewavFileという関数でsample.wavファイルに音声を録音します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import pyaudio import numpy import wave WAVE_OUTPUT_FILENAME = "sample.wav" iDeviceIndex = 0 def MakeWavFile(FileName = "sample.wav", Record_Seconds = 2): chunk = 1024 FORMAT = pyaudio.paInt16 #monoral CHANNELS = 1 #sampling rate for wav RATE = 44100 p = pyaudio.PyAudio() stream = p.open(format = FORMAT, channels = CHANNELS, rate = RATE, input = True, frames_per_buffer = chunk) #Start Record print("Recording...") all = [] for i in range(0, int(RATE / chunk * Record_Seconds)): data = stream.read(chunk) all.append(data) #Finished Record print("Finished") stream.close() p.terminate() wavFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb') wavFile.setnchannels(CHANNELS) wavFile.setsampwidth(p.get_sample_size(FORMAT)) wavFile.setframerate(RATE) wavFile.writeframes(b"".join(all)) wavFile.close() |
音声を文字に変換するプログラムを作成します。speech_to_char()という関数が音声を文字に変換したmessage_stackを返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import io import os # Imports the Google Cloud client library from google.cloud import speech from google.cloud.speech import enums from google.cloud.speech import types def speech_to_char(): # Instantiates a client client = speech.SpeechClient() # The name of the audio file to transcribe file_name = os.path.join('sample.wav') with io.open(file_name, 'rb') as audio_file: content = audio_file.read() audio = types.RecognitionAudio(content=content) config = types.RecognitionConfig( encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16, sample_rate_hertz=44100, #Japanese language language_code='ja-JP') response = client.recognize(config, audio) message_stack="" for result in response.results: print('Transcript: {}'.format(result.alternatives[0].transcript)) message_stack +="{}".format(result.alternatives[0].transcript) return message_stack |
ツイッター投稿用の設定をします。Consumer Key(CK),Consumer Secret Key(CS), Access Token(AK), Access Token Secret(AT)の設定。自分のツイッターの開発情報を入手します。入手方法は省略します。(ググれば出てきます)
1 2 3 4 5 6 7 8 9 |
import tweepy import time CK = "XXXXXX" CS = "XXXXXX" AK = "XXXXXX" AT = "XXXXXX" auth = tweepy.OAuthHandler(CK, CS) auth.set_access_token(AK, AT) api = tweepy.API(auth) |
これらを順番に実行します。
1 2 3 4 5 6 7 8 9 10 |
#Recording MakeWavFile() time.sleep(2) #Changing from wav message=speech_to_char() time.sleep(2) #sending to tweet api.update_status(message) |
まとめ
Pythonプログラムで、"疲れたー"というつぶやきに対して、正しく"疲れた”と文字変換がされ、ツイッターに投稿することができました。リアルツイッターというべきものが簡単に作成できました。