У меня есть аудиофайлы .wav, хранящиеся в моей базе данных Django с использованием пользовательской модели AudioInfo, которая имеет следующие параметры:
1) «текст» (строка, представляющая соответствующий контент аудиофайла), например, «howdy "
2)" audio "(соответствующий аудиофайл .wav), например," howdy.wav "
3)" duration (длительность аудиофайла), например, "0.7333"
models.py
class AudioInfoManager(models.Manager):
def get_by_text(self, text):
qs = self.get_queryset().filter(text=text)
if len(qs) == 0:
return None
return qs[0]
def create_problem_audio(self, text, audio, duration):
problem_audio = self.create(text=text, audio=audio, duration=duration)
return problem_audio
class AudioInfo(models.Model):
text = models.TextField(unique=True)
audio = models.FileField(upload_to=upload_audio_info_path)
duration = models.FloatField()
objects = AudioInfoManager()
В моем файле views.py я хочу получить два аудиофайла (например," howdy.wav "и" partner.wav ") из моей модели AudioInfo,объедините файлы в один файл "howdy_partner.wav" и передайте его в качестве параметра методу AudioInfoManager "create_problem_audio" для создания и сохранения нового экземпляра AudioInfo в базе данных. Обратите внимание, что я не хочу экспортировать новый "howdy_partner".wav "файл где угодно, но не в базе данных. Сейчас это моя попытка использовать пакет pydub:
views.py
from .models import AudioInfo
from pydub import AudioSegment
from django.core.files.base import ContentFile
howdy_audio_info = AudioInfo.objects.get_by_text('howdy')
howdy_audio = howdy_audio_info.audio # .wav audio file that says "howdy"
partner_audio_info = AudioInfo.objects.get_by_text('partner')
partner_audio = partner_audio_info.audio # .wav audio file that says "partner"
# now I want to combine the two audio files to create a "howdy partner" audio file
howdy_audio_segment = AudioSegment.from_wav(howdy_audio)
partner_audio_segment = AudioSegment.from_wav(partner_audio)
howdy_partner_audio_segment = howdy_audio_segment + partner_audio_segment
# and then I want to save it to my AudioInfo model
# NOTE: this line fails because I can't generate a ContentFile using an AudioSegment
howdy_partner_audio = ContentFile(howdy_partner_audio_segment, 'howdy_partner.wav')
howdy_partner_audio_duration = howdy_partner_audio_segment.duration_seconds
howdy_partner_audio_info = AudioInfo.objects.create_problem_audio(
text="Howdy partner.",
audio=howdy_partner_audio,
duration=howdy_partner_audio_duration
)
Однако это не удается, потому что я не могу сгенерироватьContentFile с использованием AudioSegment (я белиМне нужны двоичные данные в формате .wav).Я также попытался использовать howdy_partner_audio_segment.raw_data, но это не сработало, поскольку он просто возвращает двоичную строку без какого-либо форматирования .wav.В документации pydub говорится, что я могу экспортировать файл, выполнив:
howdy_partner_audio_segment.export("howdy_partner.wav", format="wav")
Но опять же я не хочу экспортировать файл, я хочу сохранить его как поле экземпляра AudioInfo.