LINUX.ORG.RU

Ноты

 


3

2

Здравствуйте. Тут собрались крутые кодеры, которые мне помогут и ответят.

Есть нота. Частота 440 Гц. Как сделать .wav, который состоит только из этой ноты?

Я знаю ноты мелодии. Как сделать .wav, который состоит из этих нот?

Есть .wav с мелодией. Из каких нот он состоит?

На хабре что-то было, но там нет записи в .wav.

Cameyoc
() автор топика
Ответ на: комментарий от Cameyoc

Нужен. Набросал нужный тебе midi в редакторе, а затем экспортируй хоть в wav хоть в чётра лысого.

eternal_sorrow ★★★★★
()
Последнее исправление: eternal_sorrow (всего исправлений: 1)

Открыть в Audacity и сгенерировать там. А если тебе именно путём погроммирования надо, то ищешь описание формата WAV, затем пишешь прогу, в ней цикл нужной длительности, и в цикле пишешь в файл сэмплы синусоиды с нужной частотой

Harald ★★★★★
()

Есть .wav с мелодией. Из каких нот он состоит?

Это можно определить с помощью преобразования Фурье

Harald ★★★★★
()

Есть нота. Частота 440 Гц. Как сделать .wav, который состоит только из этой ноты?

Взять синус, дискретизировать с нужной точностью и частотой, добавить к этому WAV заголовок, сохранить в файл.

Я знаю ноты мелодии. Как сделать .wav, который состоит из этих нот?

Повторить вышеописанное для каждой ноты. Если нужно многоголосое звучание, почитать ещё про смешивание аудиосигналов.

Есть .wav с мелодией. Из каких нот он состоит?

Почитать что такое дискретное преобразование Фурье, взять fftw, прогнать через него данные, по спектру определить основную частоту, по ней ноту. Если нужно распознавание многоголосовых данных и/или реальных инструментов у которых спектр сильно отличается от синуса, читать дальше теорию по этому вопросу.

slovazap ★★★★★
()
Последнее исправление: slovazap (всего исправлений: 1)

Там всё легко.

Читай доки.

Или смотрю ютуб.

Вот тебе туториал, где делают прям то что ты хочешь: https://youtu.be/FYTZkE5BZ-0

Но конечно же не на богомерзком Python, а на Хаскеле :)

fsb4000 ★★★★★
()
Ответ на: комментарий от Harald

Есть .wav с мелодией. Из каких нот он состоит?

Это можно определить с помощью преобразования Фурье

Да, но это гораздо сложнее, чем может показаться на первый взгляд. Самая запара в том, что основной тон ноты по амплитуде может быть ниже, чем обертона. В исходниках Lingot можно глянуть.

Но если чистый синус, то да,

import numpy as np

w = wave.open('440.wav', 'wb')
w.setparams((1, 1, 44100, 0, 'NONE', 'NONE'))
w.writeframes(note(440, 5))  # см. note() в примере ниже
w.close()

w = wave.open('440.wav')
n = w.readframes(-1)

freq = 44100 * (np.argmax(abs(np.fft.fft(list(n)))[1:]) + 1) / len(n)

print(freq, 'Hz')
$ python w.py
440.0 Hz

Что касается генерации, то вообще изи:

import wave
from math import sin, pi

def note(f, t, sf=44100):
    n = (sin(2*pi*f*i/sf) for i in range(round(t*sf)))
    return bytes(round(127+127*i) for i in n)

w = wave.open('wave.wav', 'wb')
w.setparams((1, 1, 44100, 0, 'NONE', 'NONE'))

Cmajor = [(261.6256, 0.25), (329.6276, 0.25), (391.9954, 0.33)]
for f,t in Cmajor:
    n = note(f, t)
    w.writeframes(n)

w.close()
anonymous
()

Как сделать .wav, который состоит из этих нот?

man sox. У @rebforce на гейхабе, кажется, пример был.

mertvoprog
()

Написать мелодию в lmms

anonymous
()

Может проще будет прото их сыграть на пианино, если дома есть. И записать на микрофон в ноуте.

anonymous
()
Ответ на: комментарий от Cameyoc

если человек простой, тогда бы брал midi и делал wav, как добрый людь выше посоветовал

ergo ★★★
()
Ответ на: комментарий от Cameyoc

Я человек простой. Мне исходник нужен. Либо руководство для программ.

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

erfea ★★★★★
()

удеви препода

import wave; from numpy import linspace, sin, pi, exp, log
note = lambda f,t: sin(linspace(0, 2*pi*f*t, round(t*44100)))
chrd = lambda f,t,m=0: (note(f,t) + note(2**((4-m)/12)*f,t) + note(2**(7/12)*f,t)) / 3
w = wave.open('wave.wav', 'wb'); w.setparams((1, 2, 44100, 0, 'NONE', ''))
for f,m in [(2**(3/12),0), (1,1), (2**(-4/12),0), (2**(-2/12),0)] * 8:
  c = chrd(220*f, 1.76, m) * exp(-log(linspace(0.01,7,round(1.76*44100)))**2)
  w.writeframes((c*0x7fff).astype('i2'))
w.close()

послушать результат

anonymous
()

Сгенерировать ноту:

sox -n -r 8000 output.wav synth 3 sine 500

где:

  • -n - нет входного файла
  • -r 8000 - частота дискретизации в итоговом файле
  • output.wav - имя выходного файла
  • synth 3 - синтезировать 3 секунды
  • sine 500 - синус с частотой 500 Гц.
Xintrea ★★★★★
()
Ответ на: комментарий от Cameyoc

Я человек простой. Мне исходник нужен.

Так аудасити открытый, бери и смотри.

А вообще тебе выше правильно сказали - тебе нужен MIDI.

Ты хочешь на пистоне ноты генерить? Путь примерно такой: ищешь/пишешь либу, генеряющую тебе midi файл из нужных нот, запускаешь «экспорт» в wav из midi, используя либо очередную либу, либо любой внешний конвертер (не удивлюсь, если ffmpeg умеет).

Насчет распознавания будет сложнее, думаю, но путь примерно такой же.

Zhbert ★★★★★
()
Ответ на: комментарий от Xintrea

sine 500

sox, кста, ноты понимает:

play -n synth sin A3 sin Db4 sin E4
anonymous
()

Есть .wav с мелодией. Из каких нот он состоит?

Поучиться в музыкальной школе и на слух записать мелодию в нотную тетрадь.

Psilocybe ★★★★
()

Аудио файлы не состоят из нот. Почитай про частоту дискретизации и разрядность (битность). Много раз в секунду фиксируется звуковое давление (громкость), всё это записывается в файл с применением различных кодировок (сжатия). Wav это формат без сжатия. Можно сгенерировать звук программно, это называется синтезом и делается в секвенсерах (sequencer), где создаются партии midi (хоть мышкой вози, хоть специальную клавиатуру подключай). Затем на дорожку накладываются эффекты по вкусу, чтобы звучало более интересно. В Linux самый удобный редактор для создания музыки - LMMS. А как синтезировать звук на низком уровне тебе уже написали, готовые решения за бесплатно никто писать не станет. Если учишься на кодера и у тебя такие мысли, следует задуматься о смене профессии, потому что на работу всё равно не попадёшь.

InterVi ★★★★
()
Последнее исправление: InterVi (всего исправлений: 2)

Я когда в аудиоредакторе открываю .wav, то вижу какую-то штуку, похожую на закрашенное приближение криволинейной трапеции. Когда нажимаю на проигрывание, по нему бежит линия. Это что за зверь? По нему можно глазуально определить частоты?

Cameyoc
() автор топика
Ответ на: комментарий от Cameyoc

Спасибо

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

в аудиоредакторе открываю .wav … можно глазуально определить частоты?

Если это Audacity, то там есть режим отображения спектра вместо волны. Нажми Shift+M и выбери Spectrogram («Спектрограмма», наверное, по-русски будет). https://www.youtube.com/watch?v=7WYw3qoTdU4

Если какой-то другой, то по-любому есть анализатор спектра, поищи.

anonymous
()
Ответ на: комментарий от fsb4000

:J ого хейт питошки, тебя что котечка с метапрогом покусали?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.