Toon posts:

[Python] Record audio van browser

Pagina: 1
Acties:

Onderwerpen

Vraag


  • uppie8374
  • Registratie: maart 2002
  • Laatst online: 14-08 20:59
Voor het automatiseren van tests voor een web applicatie wil ik testen of de player ook audio afspeelt. Mijn plan was om een audio sample van x seconden op te nemen en deze te analyseren om te bepalen of het geheel boven een bepaalde treshold komt.

Na wat zoekwerk kwam ik op de PyAudio library. In eerste instantie heb ik het standaard code voorbeeld gebruikt (zie hieronder). Dit werkte goed en nam op het juiste moment op, maar alleen mijn onboard microfoon in plaats van de audio van de browser. Na veel zoekwerk kom ik op internet ook alleen voorbeelden tegen die werken met de microfoon.

Ik heb nog wat gespeeld met de 'input_device_index' en 'output_device_index' die meegegeven kunnen worden bij 'audio.open()'. Maar dit resulteerde in foutmeldingen of alsnog een opgenomen microfoon kanaal.

Verder zoekwerk op internet levert ook niet direct een andere library op waarbij je kunt specificeren om enkel de audio van de browser te recorden.

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import pyaudio
import wave


chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 10

audio = pyaudio.PyAudio()

stream = audio.open(format=FORMAT,
       channels=CHANNELS,
       rate=RATE,
       input=True,
       output=True,
       frames_per_buffer=chunk)

print("* recording")

audio_frames = []

for i in range(0, 44100 // chunk * RECORD_SECONDS):
       data = stream.read(chunk)
       audio_frames.append(data)


print("* done")


stream.stop_stream()
stream.close()
audio.terminate()

waveFile = wave.open('test.wav', 'wb')
waveFile.setnchannels(CHANNELS)
waveFile.setsampwidth(audio.get_sample_size(FORMAT))
waveFile.setframerate(RATE)
waveFile.writeframes(b''.join(audio_frames))
waveFile.close()

Rebuilding knowledge database

Alle reacties


  • DaFeliX
  • Registratie: december 2002
  • Laatst online: 17-09 13:28

DaFeliX

Tnet Devver
De library die je gebruikt is specifiek bedoelt voor het aansturen van een geluidskaart, dwz, opnemen van de microfoon en geluid sturen naar je "boxen".

Wat je volgens mij wil, is het capturen van geluid dat een andere applicatie naar je geluidskaart stuurt. Je zult hiervoor moeten inhaken op je geluidskaart. Dat is afhankelijk van op welk platform je zit anders, dus op Linux zou je kunnen inhaken op PulseAudio en onder windows moet je volgens mij iets doen met WASAPI.

Wat is de reden dat je geluid wil opnemen van je browser? Want waarschijlijk kan het handiger dan het proberen te capturen van het geluid van je browser. Als het gaat om een stream, is het wellicht handiger om daar een andere applicatie voor te gebruiken die de audio direct kan invoeren in je applicatie.

Wellicht dus handig om even aan te geven waarom je dit wil.

Einstein: Mijn vrouw begrijpt me niet


  • uppie8374
  • Registratie: maart 2002
  • Laatst online: 14-08 20:59
We hebben een video player op een website, en ik wil geautomatiseerd testen of zowel beeld als geluid het goed doen, onafhankelijk van welke media op dat moment gestreamed wordt.

Om het beeld te testen maak ik screenshots met een interval en een bepaalde duur en vergelijk vervolgens die images met elkaar. Echter bij sommig materiaal komt het voor dat er enkel geluid is en geen beeld, en de player toch werkt. Zodoende wil ik testen of er audio afgespeeld wordt om te checken of de player het doet.

Kortom, het is dus de bedoeling dat ik de player test, niet de stream naar de player toe.

Rebuilding knowledge database


  • Kalentum
  • Registratie: juni 2004
  • Laatst online: 22:51
Hoe heb je gezocht? Ik kwam vrij snel dit tegen waar verschillende opties staan.

En je kan ook nog een command line tool gebruiken en die aanroepen vanuit python, bv https://superuser.com/a/1412469

[Voor 28% gewijzigd door Kalentum op 03-06-2020 12:52]

PVoutput


  • uppie8374
  • Registratie: maart 2002
  • Laatst online: 14-08 20:59
Die eerste link kwam ik ook tegen, maar die heeft het over 2 libraries om te gebruiken bij recorden, de pyaudio, die ik niet aan de praat kreeg, en de sounddevice library, waar ze ook bijzetten dat die is om de microphone te recorden. Leek mij dus dat die ook niet in staat was om enkel de browser te recorden.

Je onderste optie is inderdaad nog wel mogelijk, maar iets meer omweg. Ik hoop nog steeds op een optie met enkel Python.

Rebuilding knowledge database


  • uppie8374
  • Registratie: maart 2002
  • Laatst online: 14-08 20:59
Goed, via een omweg gefixt.

Python:
1
2
3
4
5
6
7
8
9
10
11
    def record_audio(self, length):
        audio = 'Stereo Mix (Conexant ISST Audio)'
        filename = 'test_audio.wav'
        print('starting ffmpeg')
        try:
            subprocess.run(['ffmpeg', '-f', 'dshow', '-i', f'audio={audio}', '-t', str(length), filename], capture_output=True, check=True)
            print('done with ffmpeg')
        except:
            print('recording failed')

        return filename


Voor het opnemen, mbv ffmpeg.

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
import soundfile as sf
import numpy as np

    def analyse_audio(self, file):
        print('analyzing ' + str(file))
        if os.path.isfile(file):
            rms = [np.sqrt(np.mean(block ** 2)) for block in
                sf.blocks(file, blocksize=1024, overlap=512)]
            average = sum(rms) / len(rms)
        else:
            print('File not found')
            average = 0
        return average


Om te analyseren of er geluid in het opgenomen bestand zit.

[Voor 5% gewijzigd door uppie8374 op 10-06-2020 13:05]

Rebuilding knowledge database

Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee