Skip to main content

Audio sound file testing/analyzes module

Project description

Copyright (c) 2021 lorry_rui , Newark ,USA

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

*for manufacture test sweep tone sound file ,which also do combined some package from opensource.
audio file analyze USE only @ Lorry RUi

Main feature for this package

1) Can set speaker and microphone level and get current friend_name
2) Can Open write sound file. like WAV/MP3 file read/write ( SOUNDFILE)
3) Can play(can set master speaker volume) and recording through microphone, which can point the 
	specific Mic. ( Sounddevice)	
4) Can get single tone power and THD+N  
5) can get sweep tone FR , THD, rub/buzz
6) can  measure sound Spectrogram (For ML or noise study) ( librosa)

Mail to: :lorryruizhihua@gmail.com

     :lrui@logitech.com

https://pypi.org/project/LvAut

https://github.com/Lorrytoolcenter/LvAut

|tests| |coverage| |docs| |python-versions| |license|  

The Python package handles all kind of audio files

sample code:

.. code:: python

   import LvAut.lvaut_THD as AUT 
   filename='yourfile.wav' 
   signal, sample_rate, channels=AUT.load(filename) 

change master speaker volume (from HID level)

.. code:: python

	from LvAut.sound_level import setspeakervolume  
	setspeakervolume(40)  ## set master speaker volume from 0 to 100

change current speaker volume and current Microphone level (from MS driver level)

.. code:: python

	import LvAut.lvaut_THD as AUT  
	a=AUT.speaker_volume(50)## set current speaker volume from 0 to 100(if mute will unmute),return reading after set
	#a=AUT.speaker_volume(50,False) ## set current speaker volume from 0 to 100(never touch mute),return reading after set
	#a=AUT.speaker_volume(50,False,False) ## only readout volume
	### set Microphone
	b=AUT.mic_level(50)## set current microphone level from 0to 100(if mute will unmute),return reading after set
	#b=AUT.mic_level(50,False)## set current microphone level from 0to 100(never touch mute),return reading after set
	#b=AUT.mic_level(50,False,False)## only readout volume
	print(a,b)

change All speakers' volume and All Microphone level (from MS driver level)

.. code:: python

	import LvAut.lvaut_THD as AUT  
	a=AUT.speaker_all(50)## set all speakers volume from 0 to 100,return how many speaker done set
	b=AUT.mic_all(50)## set all microphones level from 0to 100,return how many mics done set
	print(a,b)

Get current system default speaker or current Microphone friendname (from MS driver level)

.. code:: python

	import LvAut.lvaut_THD as AUT  
	a=AUT.get_currentSpeakname() ## get current speaker name
	b=AUT.get_currentMicname() ## get current Microphone name
	print(a,b)

play master speaker

.. code:: python

	import LvAut.lvaut_THD as AUT
	AUT.playsoundWin('yourfile.wav')

list all speaker and mics devices

.. code:: python

	import LvAut.device as sd
	print(sd.query_devices())

recording master microphone(you can choose specific device)

.. code:: python

	import LvAut.device as sd
	import LvAut.lvaut_THD as AUT
	fs = 44100  # Sample rate
	seconds = 5  # Duration of recording
	myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=1)  # using default mic
	#myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=1, device="Microphone (Logitech Webcam C930e), Windows DirectSound")
	sd.wait()  # Wait until recording is finished
	AUT.write("test.wav",myrecording,fs)

recording and play simultaneously

.. code:: python

	import LvAut.lvaut_THD as AUT
	import LvAut.soundload as sf
	import LvAut.device as sd
	data, fs = sf.read(your sound file, frames=-1, start=None, stop=None, dtype=None, always_2d=False,
					   fill_value=None, out=None, samplerate=None, channels=None,
					   format=None, subtype=None, endian=None, closefd=True)
	myrecording = sd.playrec(data, samplerate=fs, channels=1, dtype=None,
							 out=None, input_mapping=None, output_mapping=None, blocking=False,
							 device=device) # if None , will use default device
	sd.wait()  # Wait until recording is finished
	AUT.write(outfile,myrecording,fs,'PCM_32') ## 'PCM_16','PCM_32', 'FLOAT', 'DOUBLE'

analyze_sweep tone

.. code-block:: python

	import LvAut.lvaut_THD as AUT  
	filename='Device_Mic_THD_R_3.wav'  
	trigeFrequncy=400  ## this need sweep from high(above 400) to low sweep tone  
	stopananlysis=100   ## stop analyze_sweep  
	channaelselect=1 ### if recording is dual channel ,leftchannel=1, rightchannel=2, otherwise no need to define  
	freq,thdh,thd_N,power,Freq_THD,thd_data,Freq_Power,PowerS,RubBuzz_data=AUT.analyze_sweep(filename, trigeFrequncy,stopananlysis,channaelselect) 
	print('FFT Frequency:   %.1f Hz' % freq)  
	print("Sweep Max THD:   %.4f%% " %thdh)  
	print("Sweep Max THD+N: %.4f%%      Note, this is single tone use only " %thd_N)  
	print("spectrum Max Power:       %.2fdB " %power)     

output explain which analyze_sweep tone

	*1)freq  means: single tone , measured frequency  
	*1.1)thd_N   means: single Max THD+N   	
	*2)thdh   means: Sweep Max THD    
	*3)Freq_THD, measure THD's frequency   
	*4)thd_data, measure THD's data   
	*5)Freq_Power,measure Power's frequency  
	*6)PowerS,  measure Power's data  
	*7)RubBuzz_data    measure RB's data    

.. image:: images/wav_channel_1_THD_out.png :width: 600

analyze_sweep tone out chart setting

.. code-block:: python

	import LvAut.lvaut_THD as AUT  
	filename='Device_Mic_THD_R_3.wav'  
	trigeFrequncy=400  ## this need sweep from high(above 400) to low sweep tone  
	stopananlysis=100   ## stop analyze_sweep  
	channaelselect=1 ### if recording is dual channel ,leftchannel=1, rightchannel=2, otherwise no need to define  
	freq,thdh,thd_N,power,Freq_THD,thd_data,Freq_Power,PowerS,RubBuzz_data=AUT.analyze_sweep(filename, trigeFrequncy,stopananlysis,channaelselect) 		
	AUT.diplaychart(Freq_THD,thd_data,Freq_Power,PowerS,RubBuzz_data,chart_name="save_picture_name",channel= channaelselect)#display chart, pleae note : this function need import matplotlib

analyze sound file spectrogram : Convert a power spectrogram (amplitude squared) to decibel (dB) units This computes the scaling 20 * log10(S / ref) in a numerically

.. code-block:: python

	import LvAut.lvaut_THD as AUT
	import LvAut.lvspectrum as lvs
	import numpy as np

	filename='your soundfile.wav'
	y, sample_rate, channels=AUT.load(filename)

	S_scale = lvs.stft(y, n_fft=2048, hop_length=512)
	Y_scale = np.abs(S_scale)
	Y_log_scale = lvs.amplitude_to_db(Y_scale,ref=np.max)
	print(Y_log_scale)
	## print out all data  	

analyze sound file spectrogram(which need install matplotlib)#Compute dB relative to peak power

.. code-block:: python

	import LvAut.lvaut_THD as AUT
	import LvAut.lvspectrum as lvs
	import LvAut.lvdisplay as lvd

	import matplotlib.pyplot as plt
	import numpy as np

	filename='your sound file.wav'

	def plot_spectrogram(Y, sr, hop_length, y_axis="linear"):
		plt.figure(figsize=(16, 10))
		lvd.specshow(Y,
								 sr=sr,
								 hop_length=hop_length,
								 x_axis="time",
								 y_axis=y_axis)
		plt.colorbar(format="%+2.f")
		plt.show()



	y, sample_rate, channels=AUT.load(filename)

	S_scale = lvs.stft(y, n_fft=1024, hop_length=512)
	Y_scale = np.abs(S_scale)
	Y_log_scale = lvs.amplitude_to_db(Y_scale,ref=np.max)
	plot_spectrogram(Y_log_scale, sample_rate, 512)

.. image:: images/tonal_test.png :width: 600

.. image:: images/THD_tools.jpg :width: 600

github sample code explain https://github.com/Lorrytoolcenter/LvAut

| 1) *masters_speaker_volume.py*  : test master volume  
| 1.1) *mic_speaker_level.py*  : sample for changing current speaker volume and current mic level  
| 2) *play_sound.py* : test play speaker  
| 3) *record_sound.py* : test recording   
| 4) *plot_spectrogram.py* plot spectrogram chart  
| 5) *spectrumg_data.py*    : pull out data  
| 6) *SingleTone_thd.py*  : play single and get THD  
| 7) *sweep_thd.py*       : Play sweep tone and get THD by your input traget tone
| 8) :ref:`<play_record.py>`       : recording and play simultaneously  
| 9) *wav_file_test_sample.py*       : analyze Sweep WAV file to get FR and THD  

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

LvAut-2021.2.1.tar.gz (1.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

LvAut-2021.2.1-py3-none-any.whl (1.5 MB view details)

Uploaded Python 3

File details

Details for the file LvAut-2021.2.1.tar.gz.

File metadata

  • Download URL: LvAut-2021.2.1.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.6.3

File hashes

Hashes for LvAut-2021.2.1.tar.gz
Algorithm Hash digest
SHA256 238bf144e7e16844b5c480e5377fec20cca27ed74a6f360ecc95cbd1a1ca2923
MD5 2e30fc0b66fcb2f3ba659f00a2bedb5f
BLAKE2b-256 05fc1fc0effa18ae619d839fc8f5c8c308a03efb6d18827a4f55eea63905f4cd

See more details on using hashes here.

File details

Details for the file LvAut-2021.2.1-py3-none-any.whl.

File metadata

  • Download URL: LvAut-2021.2.1-py3-none-any.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.6.3

File hashes

Hashes for LvAut-2021.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 89baa80fe2681e0ef5a5eb7230574f4f72d554d5e6ce4fa74558229c4e65dea9
MD5 075e174eb54055c50dfc01970d2384d0
BLAKE2b-256 21c150f32f773a27011eec714dc6e9d3cf76eb03fea5531322bab537e2ed7e81

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page