Audio en Python

Moderators: jkien, Xilvo

Gebruikersavatar
Berichten: 7.463

Audio en Python

Zou onderstaande Python progje geluid moeten maken als je het in Spyder draait?

Code: Selecteer alles

import pylab as pl
def sinosc(amp,freq,ph,sr):
 incr = freq*2*pl.pi/sr
 # 1 sec of audio
 out = pl.zeros(sr)
 for i in range(0,sr):
  # function lookup
  out[i] = pl.sin(ph)
  # increment
  ph += incr
 # scaling
 out *= amp
 return out
Ik hoor niets....

Gebruikersavatar
Berichten: 7.463

Re: Audio en Python

Of moet ik amp, freq, ph, sr zelf nog aangeven?

Gebruikersavatar
Berichten: 2.351

Re: Audio en Python

Je definieert een functie die de bemonsterde waarden van een sinus met een bepaalde frequentie teruggeeft. En dat is het. Ik verwacht dus geen geluid. Ik denk dat er heel wat ontbreekt. Er is zelfs geen main in je programma.

Gebruikersavatar
Berichten: 7.463

Re: Audio en Python

Weet je een basaal Python progje dat wel geluid geeft? Ik wil daar dan wat mee experimenteren. Maar om te beginnen wil ik een geluidje hebben.

Gebruikersavatar
Berichten: 2.351

Re: Audio en Python


Gebruikersavatar
Berichten: 7.463

Re: Audio en Python

Helaas - dat werkt ook niet.

Gebruikersavatar
Berichten: 1.605

Re: Audio en Python

Hallo pp,

Probeer onderstaande eens. Datafile word geconverteerd naar mp3 en gesaved.

Mp3 met pc afspelen. Binnen spyder afspelen moeilijk zonder installatie extras.

Code: Selecteer alles

# Deze code creert een audio .wav of .mp3 file van een dataset
# Geef samplerate en tjidduur aan
# Creer functie genaamd [data]
# [scaled] normaliseerd (wat precies niet uitgezocht)

import numpy as np
from scipy.io.wavfile import write

# Tijdsduur in seconden
time=10

# Samplerate, d.w.z. maximale frequentie
samplerate=20000

# Frequentie van sinustoon in Hz
freq=440

# De dataset waarvan je audio wil hebben
t=np.linspace(0,time,samplerate*time)
data=np.sin(t*np.pi*freq*2*np.pi)

# Geschaalde versie van data (tbv. normalisering)
scaled = np.int16(data/np.max(np.abs(data)) * 32767)

# Wegschrijven van scaled in .mp3 of .wav
write('my_first_audio.mp3',samplerate,scaled)
Meer commentaar dan code.

Gebruikersavatar
Berichten: 1.605

Re: Audio en Python

Heb ergens nog een stuk taart pi(e) teveel gegeten. Frequentie te hoog moet zonder pi(e)! :D :) ;)

Code: Selecteer alles

data=np.sin(t*np.pi*freq*2)
Mij kalibrator: 440 [Hz]

Opslaan als andere audiofiles behalve: .wav of .mp3 wellicht ook mogelijk (.ogg). Heb ik niet verder uitgezocht.

nb. audio bestand word in default folder opgeslagen waar spyder files staan. Je kunt ook andere locatie aangeven. Kan zijn dat je forward slash moet gebuiken (op windows pc).

Code: Selecteer alles

# Wegschrijven van scaled in .mp3 of .wav
write('c:/temp/my_first_audio.mp3',samplerate,scaled)

Gebruikersavatar
Berichten: 7.463

Re: Audio en Python

Ik gebruik Linux Mint. Hoe komt het progje er nu uit te zien?

Gebruikersavatar
Berichten: 1.605

Re: Audio en Python

Heb je de code geprobeerd in spyder?

Als je geen error krijgt heeft hij/zij/het waarschijnlijk .mp3 gemaakt. Waar jouw standaard spyder of persoonlijke folder is weet ik niet (op Linux). Pas eventueel save folder aan zie vorige bericht.

Doorzoek anders computer op file naam: 'my_first_audio.mp3'.

De frequentie "gekalibreerde" code met een enkele pi(e):

Code: Selecteer alles

# Deze code creert een audio .wav of .mp3 file van een dataset
# Geef samplerate en tjidduur aan
# Creer functie genaamd [data]
# [scaled] normaliseerd (wat precies niet uitgezocht)

import numpy as np
from scipy.io.wavfile import write

# Tijdsduur in seconden
time=10

# Samplerate, d.w.z. maximale frequentie
samplerate=20000

# Frequentie van sinustoon in Hz
freq=440

# De dataset waarvan je audio wil hebben
t=np.linspace(0,time,samplerate*time)
data=np.sin(t*np.pi*freq*2)

# Geschaalde versie van data (tbv. normalisering)
scaled = np.int16(data/np.max(np.abs(data)) * 32767)

# Wegschrijven van scaled in .mp3 of .wav
write('my_first_audio.mp3',samplerate,scaled)

Gebruikersavatar
Berichten: 7.463

Re: Audio en Python

Mooi dat werkt! Het levert nu inderdaad een afspeelbaar MP3-bestandje met een toon op. :-)

Gebruikersavatar
Berichten: 1.605

Re: Audio en Python

Geweldig!!! Dat eventjes veel zoekwerk een simpele methode te vinden. Met [numpy] en [scipy] alleen.

Dat is iets wat ik al eerder wilde uitzoeken maar nooit zin in had. Voor dit onderwerp wilde ik nooit extra dingen installeren. :twisted:

Bent benieuwd naar jouw eerste creaties! Laat wat van jouw "horen" :D !

Gebruikersavatar
Berichten: 7.463

Re: Audio en Python

Ik vraag mij nog even af of er ook een speciale Open Source en gratis IDE voor audio-toepassingen met Python bestaat. Dat zou voor zulk geknutsel met computermuziek wellicht handiger zijn dan het gebruik van Spyder.

Gebruikersavatar
Berichten: 7.463

Re: Audio en Python

http://ajaxsoundstudio.com/pyodoc/examp ... -tone.html

Dit zou direct een geluid moeten geven, maar het sterretje geeft een foutmelding. Was er niet iets met dat sterretje dat dat niet meer mag?

Gebruikersavatar
Berichten: 1.605

Re: Audio en Python

Waarschijnlijk wil je een bibliotheek gebruiken wat niet in jouw standaard Spyder zitten. Tevens gebruik je Linux Mint en vreest foutmeldingen door het installeren van andere tools (zoals in eerder topic vermeld).

Volgens mij heb ik een methode aangedragen: 6 regels code om een sinus toon van 440 voor 10 seconden te laten klinken met samplerate: 20000. Met de meest basic tools in Python (numpy en scipy) en beschikbaar in meeste standaard versies. De rest is aan jouw fantasie.

Als je jouw doel goed vermeld?
  • Wil je een interface hebben met een play button voor je sample/.mp3 geluid/file?
  • WIl je via spyder een instructie geeft aan operating systeem een geluid af te spelen?
  • Wil jezelf .wav/.mp3 geluiden/bestanden maken om die te gebruiken voor synth of iets dergelijks?
De code zonder blabla:

Code: Selecteer alles

import numpy as np
from scipy.io.wavfile import write

t=np.linspace(0,10,20000*10)
data=np.sin(t*np.pi*440*2)
scaled = np.int16(data/np.max(np.abs(data)) * 32767)
write('my_first_audio.mp3',20000,scaled)

Reageer