Skip to main content

The Python API to the HANCE engine, which offers realtime audio enhancement.

Project description

Audio Enhancement in Python with HANCE

HANCE is an audio enhancement engine that delivers impressive performance. With its Python wrapper, you can easily integrate HANCE into your Python projects to improve the quality of audio signals.

To learn more about HANCE, visit Hance.ai.

Installation

To install the Python wrapper for HANCE, use 'pip':

python -m pip install hance

HANCE is compatible with Python 3 and later.

How to Use

The HANCE Python API is a wrapper around the C++ library. Here are a few ways you can use it.

To use the API, import it and list the available models:

import hance
models = hance.list_models()
print(models)

Process a file

To process a file with HANCE, you can use the process_file function as follows:

import hance
models = hance.list_models()
hance.process_file(models[0], input_file_path, output_file_path)

This will apply the enhancement model specified by models[0] to the input file located at input_file_path, and save the enhanced audio to the output file at output_file_path. Please note that in this example, we are using PySoundFile to read and write audio files. While PySoundFile is not a requirement for using HANCE, it is a convenient library for handling audio files in Python. If you wish to use the process_file function as shown here, you will need to install PySoundFile.

Process a stream

In addition to processing audio files, HANCE can also be used on audio streams in real-time. Here is an example using pyaudio to record the microphone, process it in real time, and output it to headphones.

import pyaudio
engine = hance.HanceEngine()
p = pyaudio.PyAudio()

FORMAT = pyaudio.paFloat32
CHANNELS = 1
RATE = 44100
CHUNK = 512


print("\nRecord audio from a microphone and process it in realtime with HANCE.")
print("To prevent feedback, make sure you are wearing headphones.")
print("PyAudio will induce some latency with the roundtrip to the soundcard,\nbut the HANCE engine runs in realtime.")
print("")

# Get a list of available input devices
input_devices = []
for i in range(p.get_device_count()):
    device_info = p.get_device_info_by_index(i)
    if device_info["maxInputChannels"] > 0:
        input_devices.append(device_info)

# Print the list of available input devices and ask the user to select one
print("Available input devices:")
for i, device in enumerate(input_devices):
    print(f"{i}: {device['name']}")
input_device_index = int(input("\nSelect an input device by entering its number: "))
input_device_info = input_devices[input_device_index]

# Get a list of available output devices
output_devices = []
for i in range(p.get_device_count()):
    device_info = p.get_device_info_by_index(i)
    if device_info["maxOutputChannels"] > 0:
        output_devices.append(device_info)

# Print the list of available output devices and ask the user to select one
print("\nAvailable output devices:")
for i, device in enumerate(output_devices):
    print(f"{i}: {device['name']}")
output_device_index = int(input("\nSelect an output device by entering its number: "))
output_device_info = output_devices[output_device_index]

models = hance.list_models()
processor = engine.create_processor(models[0], CHANNELS, RATE)

stop_thread = False
processor_active = True
def record_and_playback_thread():
    stream_record = p.open(format=FORMAT, channels=CHANNELS,
                rate=RATE, input=True,
                input_device_index=input_device_info['index'],
                frames_per_buffer=CHUNK)

    stream_play = p.open(format=pyaudio.paFloat32,
                channels=1,
                rate=RATE,
                frames_per_buffer=CHUNK,
                output=True,
                output_device_index=output_device_info['index']
                )
    while not stop_thread:
        data = stream_record.read(CHUNK, exception_on_overflow = False)
        audio_buffer = np.frombuffer(data, dtype=np.float32)
        if processor_active:
            audio_buffer = processor.process(audio_buffer)
        stream_play.write(audio_buffer.astype(np.float32).tobytes())
        
    # stop Recording
    stream_record.stop_stream()
    stream_record.close()
    
    stream_play.stop_stream()
    stream_play.close()
    
    

t = threading.Thread(target=record_and_playback_thread)
t.start()

print("\nThe microphone and processing is active")
while True:
    user_input = input("Enter 'p' to toggle processing on and off or 'x' to exit the thread: ")
    if user_input.lower() == "p":
        # Bypass processing and continue the loop
        if processor_active:
            processor_active = False
            print("The processing is bypassed")
        else:
            processor_active = True
            print("The processing is active")
    elif user_input.lower() == "x":
        # Stop the thread
        stop_thread = True
        break

t.join()
p.terminate()

For more information and examples on using HANCE, see the HANCE documentation.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

hance-1.0.6-py3-none-win_amd64.whl (8.9 MB view details)

Uploaded Python 3 Windows x86-64

hance-1.0.6-py3-none-win32.whl (7.0 MB view details)

Uploaded Python 3 Windows x86

hance-1.0.6-py3-none-manylinux1_x86_64.whl (13.5 MB view details)

Uploaded Python 3

hance-1.0.6-py3-none-macosx_11_0_arm64.whl (9.8 MB view details)

Uploaded Python 3 macOS 11.0+ ARM64

hance-1.0.6-py3-none-macosx_10_9_x86_64.whl (9.8 MB view details)

Uploaded Python 3 macOS 10.9+ x86-64

File details

Details for the file hance-1.0.6-py3-none-win_amd64.whl.

File metadata

  • Download URL: hance-1.0.6-py3-none-win_amd64.whl
  • Upload date:
  • Size: 8.9 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for hance-1.0.6-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 ec2ee96a11b1c29d0cfe625529b009d172743f4348c0c3f4f8b0b35a7ef5014f
MD5 5dc45fcb49ee50e379ebd0b0e18a65f5
BLAKE2b-256 7f1e646a1a12f322f03ae63891f9a113bc3dda501bff8d9caa57f35fd2da8a78

See more details on using hashes here.

File details

Details for the file hance-1.0.6-py3-none-win32.whl.

File metadata

  • Download URL: hance-1.0.6-py3-none-win32.whl
  • Upload date:
  • Size: 7.0 MB
  • Tags: Python 3, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for hance-1.0.6-py3-none-win32.whl
Algorithm Hash digest
SHA256 8c6f41e46cab006360b6bbfba13e7afdf78b344b0d3746e6fe9581470d3a22bf
MD5 f48f2d51470e4015be6dd0c6ecf490d3
BLAKE2b-256 37693b3abf999f0e83667b7fb8eb18e2c9294d8ff764734e503dd1b685a8a90b

See more details on using hashes here.

File details

Details for the file hance-1.0.6-py3-none-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for hance-1.0.6-py3-none-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 c7e7ba18517fbcf559745cb0adf65ed597dbcc874098cd4190836ef07db54a61
MD5 80da378aec10a08fdbdd550a5029216c
BLAKE2b-256 f92809f9380ad29f755c2d1e4732757b47a3f1fd843aaa41949d3a1335ff9b4c

See more details on using hashes here.

File details

Details for the file hance-1.0.6-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for hance-1.0.6-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 df4aff810ffa4483b6e8b3d41e728cfc9ce4fb931d060bb4dff7136f17471351
MD5 3aaeae219291c34940028e2bf17dfb62
BLAKE2b-256 48716e10da948c1b96f21f84644119ae9142d50f2e1341101010247e4f845cbc

See more details on using hashes here.

File details

Details for the file hance-1.0.6-py3-none-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for hance-1.0.6-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ff3f116c15a298f6a67b84232aa29509323d206c59f4a7dda8fda61fe612d213
MD5 d59cf6ec8f78ffcb191c8a56d04f7a8f
BLAKE2b-256 8f3d3b215a66633b1d5155bf32d8df4dbab2ebbb7d4f189e4fa4cce898d2dd3c

See more details on using hashes here.

Supported by

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