sonification
Map data to sound allowing it to be interpreted it in an auditory manner
To install: pip install sonification
Examples
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler, LabelEncoder
import simpleaudio as sa
def preprocess_dataframe(df):
df = df.copy()
# Normalize numerical columns
scaler = MinMaxScaler()
for column in df.select_dtypes(include=np.number).columns:
df[column] = scaler.fit_transform(df[[column]])
# Ensure durations are not zero
if 'duration' in df.columns:
df['duration'] = df['duration'] + 0.01 # Adding a small value to ensure durations are not zero
# Encode categorical columns
label_encoders = {}
for column in df.select_dtypes(include='object').columns:
le = LabelEncoder()
df[column] = le.fit_transform(df[column])
label_encoders[column] = le
return df, label_encoders
def generate_tone(frequency, duration, volume, sample_rate=44100):
t = np.linspace(0, duration, int(sample_rate * duration), False)
wave = volume * np.sin(frequency * t * 2 * np.pi)
return wave
def map_features_to_audio(df, pitch_col, duration_col, volume_col, sample_rate=44100):
waveform = np.array([])
for index, row in df.iterrows():
pitch = row[pitch_col]
duration = row[duration_col]
volume = row[volume_col]
frequency = 440 + pitch * 440 # Example: Map pitch to frequency
wave = generate_tone(frequency, duration, volume, sample_rate)
# print(f"Row {index}: pitch={pitch}, duration={duration}, volume={volume}, frequency={frequency}, wave_len={len(wave)}")
waveform = np.concatenate([waveform, wave])
print(f"Final waveform length: {len(waveform)}")
return waveform, sample_rate
def save_or_return_audio(waveform, sample_rate, filepath=None):
if filepath:
# Normalize waveform to int16 range
waveform_int16 = np.int16(waveform / np.max(np.abs(waveform)) * 32767)
sa.WaveObject(waveform_int16, 1, 2, sample_rate).save(filepath)
else:
return waveform, sample_rate
def sonification_dataframe(df, pitch_col, duration_col, volume_col, sample_rate=44100, filepath=None):
df, label_encoders = preprocess_dataframe(df)
waveform, sr = map_features_to_audio(df, pitch_col, duration_col, volume_col, sample_rate)
return save_or_return_audio(waveform, sr, filepath)
# Example usage:
df = pd.DataFrame({
'pitch': [0.2, 0.4, 0.6, 0.8],
'duration': [0.5, 0.5, 0.5, 0.5],
'volume': [0.5, 0.7, 0.9, 1.0]
})
waveform, sr = sonification_dataframe(df, 'pitch', 'duration', 'volume')
# To play the audio
if waveform is not None and len(waveform) > 0:
play_obj = sa.play_buffer(np.int16(waveform / np.max(np.abs(waveform)) * 32767), 1, 2, sr)
play_obj.wait_done()
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
sonification-0.0.10.tar.gz
(8.4 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sonification-0.0.10.tar.gz.
File metadata
- Download URL: sonification-0.0.10.tar.gz
- Upload date:
- Size: 8.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0279d609d72525b6f4b4f09667643ac98061541cc4010ef7eb0d9ad2942f39d5
|
|
| MD5 |
6dc09240d61237f8a7757b166c2cdc7e
|
|
| BLAKE2b-256 |
47ffa7b23df53c40122326496f64fdb6d02c2a0f281c955c2102c56a70ffae17
|
File details
Details for the file sonification-0.0.10-py3-none-any.whl.
File metadata
- Download URL: sonification-0.0.10-py3-none-any.whl
- Upload date:
- Size: 9.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff453f4bea60a02edc3dd10c86ef91b377fa823d65238eb670e7061472b014de
|
|
| MD5 |
543f7615d0415701256df2d92ab20e21
|
|
| BLAKE2b-256 |
2722745f214442bc31e50a13efc190654b45a775d8115105905582a6dcbce2cb
|