Амплитудная модуляция коричневого шума, генерируемого акустическим пакетом в питоне

Я совершенно новичок в python, поэтому я пытался читать и изучать все, что мог, но, похоже, не могу делать то, что хочу, и я не нашел решения в Stack Overflow или других источниках. Моя цель — создать волновой файл коричневого шума с амплитудной модуляцией на заданной частоте. Я хочу генерировать коричневый шум и модулировать его.

Я намеревался использовать акустический пакет python, но, к сожалению, не понимаю, как им пользоваться функции для создания цветного шума. Я посмотрел примеры, но я не вижу примеров использования функций цветных шумов.

Кто-нибудь может помочь мне решить эту проблему? Спасибо.


Вот мой код:

""" This file proposes to modulate a given wav file"""

import wave
import struct
import time
import math
import random
import acoustics

###########################################
# General variables
outputName = "waveXP.wav"
frequencyModulation = 40
period = 1/frequencyModulation
duration = 1
maxVolume = 23000.0
framerate = 44100


###########################################
# Ask the user about the output file name
temp = ""
temp = input("Name of the output wave file to import (with extension):")
if temp != "":
    outputName = str(temp)

# Ask the user about the modulation frequency wanted
temp = ""
temp = input("Modulation frequency wanted (in hertz):")
if temp != "":
    frequencyModulation = int(temp)

period = 1/frequencyModulation

# Ask the user about the duration wanted
temp = ""
temp = input("Duration wanted (in seconds):")
if temp != "":
    duration = int(temp)

print("------------------------")


###########################################
# Create the output wave file
newWaveFile = wave.open(outputName, "w")

# Define parameters of the wave file
# nchannels = 1 for mono; sampwidth = 2 for 2 bytes per sample; framerate = 44100 for wave file;
# comptype = "NONE" for no compression support; compname = 'not compressed' for no compression support
newWaveFile.setparams([1, 2, framerate, duration, 'NONE', 'not compressed'])

# Generate noise
newWaveFile.writeframes(struct.pack('h'*framerate*duration, *int(maxVolume*0.7*acoustics.generator.brown(framerate*duration))))

# Close wave files
originalWaveFile.close()
newWaveFile.close()

person Pyxel    schedule 27.03.2018    source источник
comment
Голосую за коричневый шум   -  person Ben    schedule 27.03.2018
comment
Я думаю, вы можете получить лучшие ответы на этот вопрос из проверки кода.   -  person user3351605    schedule 27.03.2018
comment
@user3351605 user3351605 спасибо за советы, тогда попробую код-ревью   -  person Pyxel    schedule 27.03.2018
comment
@user3351605 user3351605 Я не уверен в этом; из-за пункта (1). Проверка кода предназначена только для полностью функционального кода, если есть что-то неправильное или неожиданное поведение, то есть отладка и не по теме.   -  person Ajean    schedule 27.03.2018
comment
Что касается самого вопроса, вы можете сделать его намного лучше, сократив его до одного конкретного вопроса за раз. Прямо сейчас это просто слишком широко.   -  person Ajean    schedule 27.03.2018
comment
@Ajean Это хороший момент, я предложил просмотреть код, потому что я думал, что вопрос имеет общий тон о том, как можно улучшить этот код, который слишком широк для SO. Но, возможно, это тоже не очень подходит для Code Review.   -  person user3351605    schedule 27.03.2018
comment
@user3351605 Вопрос закрыт при проверке кода   -  person Mast    schedule 27.03.2018
comment
@user3351605 user3351605 Да, я согласен, что сейчас это слишком широко - я думаю, что лучше всего для пользователя сначала сузить вопрос здесь.   -  person Ajean    schedule 27.03.2018
comment
@Pyxel Я думаю, что ваш вопрос здесь по теме, просто задайте слишком много сразу. Сужение этого поможет вам получить полезные ответы.   -  person Ajean    schedule 27.03.2018
comment
Спасибо, люди, я сужу вопрос, чтобы использовать только акустику и модулировать выход. Я отправлю еще один вопрос для модуляции существующего файла волны.   -  person Pyxel    schedule 27.03.2018


Ответы (1)


Похоже, в предложенной вами библиотеке уже есть генератор коричневого шума:

http://python-acoustics.github.io/python-acoustics/generator.html

Предполагая, что вы хотите просто применить одну модуляцию в качестве усиления амплитуды ко всему сигналу, тогда вы захотите сэмплировать свою модуляцию с частотой дискретизации сигнала и добавить модуляцию (умноженную на некоторый масштабный коэффициент) к сигналу коричневого шума. В качестве альтернативы вы можете умножить сигнал на модуляцию, но это будет гораздо более экстремальный эффект.

person Ruan Caiman    schedule 03.06.2020