2010-09-09 23 views
13

Vokalleri mp3 ses parçalarından çıkarmak istiyorum. Google'da arama yaptım ve birkaç yazılım denedim ama hiçbiri ikna edici değil. Mp3 dosyasını okumayı, bir dalga formu almayı ve belirtilen bir sınırın üstünde dalga formunu kaldırmayı planlıyorum. Nasıl devam edeceğinize dair herhangi bir öneriniz var mı? Ses yolundan vokal çıkarmak için algoritma

- Güncelleme

Sadece mp3 dosya biçimini okuyabilir kodu istiyorum. Herhangi bir yazılım var mı?

+0

Bu oldukça serin olurdu ... Ne yazılımları denediniz? – sholsapp

+0

audacity, wavosaur ve extra boy pro – Boolean

cevap

14

Bu "hile" olarak çok fazla bir "algoritma" değil, ancak kodda otomatikleştirilebilir. Çoğunlukla vokallerin merkezlendiği stereo parçalarda çalışır. Vokaller ortalanmışsa, her iki parçada da eşit olarak ortaya çıkarlar. Parçalardan birini tersine çevirir ve tekrar birleştirirseniz, merkez vokallerin dalga formları iptal edilir ve sanal olarak kaldırılır. Bunu, elveda gibi en iyi ses editörleriyle manuel olarak yapabilirsiniz. Bu size mükemmel sonuçlar vermez ve ses geri kalanı da biraz uğrar ama harika karaoke parçaları :)

+4

Buna faz iptal denir, en büyük dezavantaj, üretilen parçadır Mono – arul

+0

> "sesin geri kalanı da biraz acı çekiyor" - Bu şanslı senaryo nadirdir. en muhtemel durum, küçük seslerin kalması ve aynı zamanda çok yanlış olduğu. Bununla birlikte, genellikle stereodan daha iyi bir kaynağa (5.1, vs) sahipse daha iyi bir şey yapılabilir. ama aynı zamanda bu kadar basit –

0

Belirtilen bir sınırın üstünde mi? yüksek geçiş filtresi gibi geliyor ... Eğer orijinal ile birlikte acapella iziniz varsa faz iptalini kullanabilirsiniz. Aksi takdirde, 60'lı yılların ortalarında vokal ve ortada vokal olmayan sesleri yoksa, vokalleri temizlemenin süper temiz bir yolu olduğunu sanmıyorum.

+1

Giriş sesinin farklı seslerini ayırmak için bildiğiniz herhangi bir yol var mı? Örneğin, algoritma bize 100 farklı ses bulduğumuz sesi çıkarır ve kaldırılması için belirli sesleri bulmaya bırakılır. – ConductedClever

+0

@ConductedClever: https://en.wikipedia.org/wiki/Independent_component_analysis – user

+0

Veya daha genel olarak, https://en.wikipedia.org/wiki/Blind_signal_separation – user

8

Kaynak yapar: http://www.cdf.utoronto.ca/~csc209h/summer/a2/a2.html Daniel Zingaro tarafından yazılmış.

Sounds are waves of air pressure. When a sound is generated, a sound wave consisting of compressions (increases in pressure) and rarefactions (decreases in pressure) moves through the air. This is similar to what happens if you throw a stone into a pond: the water rises and falls in a repeating wave.

When a microphone records sound, it takes a measure of the air pressure and returns it as a value. These values are called samples and can be positive or negative corresponding to increases or decreases in air pressure. Each time the air pressure is recorded, we are sampling the sound. Each sample records the sound at an instant in time; the faster we sample, the more accurate is our representation of the sound. The sampling rate refers to how many times per second we sample the sound. For example, CD-quality sound uses a sampling rate of 44100 samples per second; sampling someone's voice for use in a VOIP conversation uses far less than this. Sampling rates of 11025 (voice quality), 22050, and 44100 (CD quality) are common...

For mono sounds (those with one sound channel), a sample is simply a positive or negative integer that represents the amount of compression in the air at the point the sample was taken. For stereo sounds (which we use in this assignment), a sample is actually made up of two integer values: one for the left speaker and one for the right...

Here's how the algorithm [to remove vocals] works.

  • Copy the first 44 bytes verbatim from the input file to the output file. Those 44 bytes contain important header information that should not be modified.

  • Next, treat the rest of the input file as a sequence of shorts. Take each pair of shorts left and right, and compute combined = (left - right) /2. Write two copies of combined to the output file.

Why Does This Work?

For the curious, a brief explanation of the vocal-removal algorithm is in order. As you noticed from the algorithm, we are simply subtracting one channel from the other (and then dividing by 2 to keep the volume from getting too loud). So why does subtracting the left channel from the right channel magically remove vocals?

When music is recorded, it is sometimes the case that vocals are recorded by a single microphone, and that single vocal track is used for the vocals in both channels. The other instruments in the song are recorded by multiple microphones, so that they sound different in both channels. Subtracting one channel from the other takes away everything that is ``in common'' between those two channels which, if we're lucky, means removing the vocals.

Of course, things rarely work so well. Try your vocal remover on this badly-behaved wav file . Sure, the vocals are gone, but so is the body of the music! Apparently, some of the instruments were also recorded "centred", so that they are removed along with the vocals when channels are subtracted.

+0

denediniz mi? – ConductedClever

+0

Hayır, sadece sınıfı denetledim, öyle olmadı ki. Artık bağlantı çalışmıyor gibi görünüyor ... – Daniel

+1

WAV dosyaları bir veya daha fazla WAVE bölümleri olan RIFF dosyalarıdır. Dosyayı bu şekilde değiştirmek, birden çok WAVE bölümü içeren dosyaları parçalayabilir ve ayrıca INFO ve ID3 etiketleri gibi diğer parçaları da kopyalayabilir. – meklarian

4

Ayrıca ilgili soru için here ayrıntılar için bkz here bkz pydub Araç Kutusu'nu kullanabilirsiniz. Bu FFmpeg bağımlı olduğunu ve şu

Sonra yapabileceğiniz herhangi FileFormat okuyabilir:

from pydub import AudioSegment 
from pydub.playback import play 

# read in audio file and get the two mono tracks 
sound_stereo = AudioSegment.from_file(myAudioFile, format="mp3") 
sound_monoL = sound_stereo.split_to_mono()[0] 
sound_monoR = sound_stereo.split_to_mono()[1] 

# Invert phase of the Right audio file 
sound_monoR_inv = sound_monoR.invert_phase() 

# Merge two L and R_inv files, this cancels out the centers 
sound_CentersOut = sound_monoL.overlay(sound_monoR_inv) 

# Export merged audio file 
fh = sound_CentersOut.export(myAudioFile_CentersOut, format="mp3") 
+0

Ortaya çıkan merkezleri nasıl kaldırabilirim? –