запись файла Python не создает новый файл - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть приложение django, я получил двоичные аудиоданные от клиента javascript, и я пытаюсь отправить его в облачную API Google для преобразования текста в текст. Проблема в том, что python не записывает двоичные аудиоданные в файл. Итак, я получаю

with io.open(file_name, "rb") as f:
FileNotFoundError: [Errno 2] No such file or directory: '.........\\gcp_cloud\\blog\\audio_file.wav'

Я заменил первую часть пути на ...........

Вот код на стороне клиента

        rec.ondataavailable = e => {
          audioChunks.push(e.data);
          if (rec.state == "inactive"){
            let blob = new Blob(audioChunks,{type:'audio/wav; codecs=MS_PCM'});
            recordedAudio.src = URL.createObjectURL(blob);
            recordedAudio.controls=true;
            recordedAudio.autoplay=true;
            sendData(blob)
          }
        }

и вот моя функция sendData

function sendData(data) {
    let csrftoken = getCookie('csrftoken');
    let response=fetch("/voice_request", {
    method: "post",
    body: data,
    headers: { "X-CSRFToken": csrftoken },
    })

    console.log('got a response from the server')
    console.log(response)
}

, а вот представление DJango, которое обрабатывает двоичные аудиоданные с клиента

def voice_request(request):
    #print(request.body)
    fw = open('audio_file.wav', 'wb')
    fw.write(request.body)
    file_name = os.path.join(current_folder, 'audio_file.wav')
    #file_name = os.path.join(current_folder, 'Recording.m4a')
    client = speech.SpeechClient()

    # The language of the supplied audio
    language_code = "en-US"

    # Sample rate in Hertz of the audio data sent
    sample_rate_hertz = 16000

    encoding = enums.RecognitionConfig.AudioEncoding.LINEAR16
    config = {
        "language_code": language_code,
        #"sample_rate_hertz": sample_rate_hertz,
        #"encoding": 'm4a',
    }
    with io.open(file_name, "rb") as f:
        content = f.read()

    audio = {"content": content}

    fw.close()

    response = client.recognize(config, audio)

    print('response')
    print(response)
    for result in response.results:
        # First alternative is the most probable result
        alternative = result.alternatives[0]
        print(u"Transcript: {}".format(alternative.transcript))

    return HttpResponse(response)

1 Ответ

0 голосов
/ 11 ноября 2019

Вы должны использовать with io.open(file_name, "wb") as f: или with io.open(file_name, "ab") as f:, потому что r означает «только для чтения», w означает «перезаписать»

, на который вы можете ссылаться: https://docs.python.org/3.7/library/functions.html?highlight=open#open

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...