Appearance
For clean Markdown of any page, append .md to the page URL. For a complete documentation index, see For full documentation content, see For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at
Migration guide: Google Speech-to-Text to AssemblyAI
For the complete documentation index, see llms.txt
This guide walks through the process of migrating from Google Speech-to-Text (STT) to AssemblyAI for transcribing pre-recorded audio.
Get Started
Before we begin, make sure you have an AssemblyAI account and an API key. You can sign up for a free account and get your API key from your dashboard.
Side-by-side code comparison
Below is a side-by-side comparison of a basic snippet to transcribe a file by Google Speech-to-Text and AssemblyAI.
python
from google.cloud import speech
client = speech.SpeechClient()
audio = speech.RecognitionAudio(
uri="gs://cloud-samples-tests/speech/Google_Gnome.wav"
)
config = speech.RecognitionConfig(
encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
sample_rate_hertz=16000,
language_code="en-US",
model="video", # Chosen model
)
operation = client.long_running_recognize(config=config, audio=audio)
print("Waiting for operation to complete...")
response = operation.result(timeout=90)
for i, result in enumerate(response.results):
alternative = result.alternatives[0]
print("-" * 20)
print(f"First alternative of result {i}")
print(f"Transcript: {alternative.transcript}")python
import assemblyai as aai
aai.settings.api_key = "YOUR-API-KEY"
transcriber = aai.Transcriber()
# You can use a local filepath:
# audio_file = "./example.mp3"
# Or use a publicly-accessible URL:
audio_file = (
""
)
config = aai.TranscriptionConfig(
speech_models=["universal-3-pro", "universal-2"],
language_detection=True,
)
transcript = transcriber.transcribe(audio_file, config)
if transcript.status == aai.TranscriptStatus.error:
print(f"Transcription failed: {transcript.error}")
exit(1)
print(transcript.text)Installation
python
from google.cloud import speech
client = speech.SpeechClient()python
import assemblyai as aai
aai.settings.api_key = "YOUR-API-KEY"
transcriber = aai.Transcriber()When migrating from Google Speech-to-Text to AssemblyAI, you'll first need to handle authentication and SDK setup:
Get your API key from your AssemblyAI dashboard. Things to know:
- Store your API key securely in an environment variable
- API key authentication works the same across all AssemblyAI SDKs
Audio File Sources
python
audio = speech.RecognitionAudio(uri="gs://cloud-samples-tests/speech/Google_Gnome.wav")
config = speech.RecognitionConfig(
encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
sample_rate_hertz=16000,
language_code="en-US",
model="video", # Chosen model
)
operation = client.long_running_recognize(config=config, audio=audio)python
transcriber = aai.Transcriber()
# Local files
transcript = transcriber.transcribe("./audio.mp3")
# Public URLs
transcript = transcriber.transcribe("")
# S3 files (using pre-signed URLs)
s3_client = boto3.client('s3')
presigned_url = s3_client.generate_presigned_url(
'get_object',
Params={'Bucket': 'my-bucket', 'Key': 'audio.mp3'},
ExpiresIn=3600
)
transcript = transcriber.transcribe(presigned_url)Here are helpful things to know when migrating your audio input handling:
- There's no need to specify the audio encoding format when using AssemblyAI - we have a transcoding pipeline under the hood which works on all supported file types so that you can get the most accurate transcription.
- You can submit a local file, URL, stream, buffer, blob, etc., directly to our transcriber. Check out some common ways you can host audio files here.
- You can transcribe audio files that are up to 10 hours long and you can transcribe multiple files in parallel. The default amount of jobs you can transcribe at once is 200 while on the PAYG plan.
Basic Transcription
python
print("Waiting for operation to complete...")
response = operation.result(timeout=90)
for i, result in enumerate(response.results):
alternative = result.alternatives[0]
print("-" * 20)
print(f"First alternative of result {i}")
print(f"Transcript: {alternative.transcript}")python
transcriber = aai.Transcriber()
config = aai.TranscriptionConfig(
speech_models=["universal-3-pro", "universal-2"],
language_detection=True,
)
transcript = transcriber.transcribe(audio_file, config)
if transcript.status == aai.TranscriptStatus.error:
print(f"Transcription failed: {transcript.error}")
else:
print(transcript.text)Here are helpful things to know about our transcribe method:
- The SDK handles polling under the hood.
- The full transcript is directly accessible via
transcript.text. - English is the default language. We recommend specifying
speech_models=["universal-3-pro", "universal-2"]for the highest accuracy. - We have a cookbook for error handling common errors when using our API.
Adding Features
python
config = speech.RecognitionConfig(
encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
sample_rate_hertz=8000,
language_code="en-US",
enable_speaker_diarization=True, # Speaker diarization
diarization_speaker_count=2, # Specify amount of speakers
profanity_filter=True # Remove profanity from transcript
)python
config = aai.TranscriptionConfig(
speech_models=["universal-3-pro", "universal-2"],
language_detection=True,
speaker_labels=True, # Speaker diarization
filter_profanity=True, # Remove profanity from transcript
speakers_expected=2, # Specify amount of speakers in audio
)
transcript = transcriber.transcribe(audio_file, config)
# Access speaker labels
for utterance in transcript.utterances:
print(f"Speaker {utterance.speaker}: {utterance.text}")Key differences:
- Use
aai.TranscriptionConfigto specify any extra features that you wish to use. - The results for Speaker Diarization are stored in
transcript.utterances. To see the full transcript response object, refer to our API Reference. - Check our documentation for our full list of available features and their parameters.