cartesia 2.0.0a2__tar.gz → 2.0.0b2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/PKG-INFO +71 -40
  2. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/README.md +70 -39
  3. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/pyproject.toml +1 -1
  4. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/core/client_wrapper.py +1 -1
  5. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/__init__.py +0 -0
  6. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/api_status/__init__.py +0 -0
  7. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/api_status/client.py +0 -0
  8. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/api_status/requests/__init__.py +0 -0
  9. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/api_status/requests/api_info.py +0 -0
  10. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/api_status/types/__init__.py +0 -0
  11. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/api_status/types/api_info.py +0 -0
  12. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/base_client.py +0 -0
  13. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/client.py +0 -0
  14. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/core/__init__.py +0 -0
  15. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/core/api_error.py +0 -0
  16. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/core/datetime_utils.py +0 -0
  17. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/core/file.py +0 -0
  18. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/core/http_client.py +0 -0
  19. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/core/jsonable_encoder.py +0 -0
  20. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/core/pydantic_utilities.py +0 -0
  21. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/core/query_encoder.py +0 -0
  22. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/core/remove_none_from_dict.py +0 -0
  23. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/core/request_options.py +0 -0
  24. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/core/serialization.py +0 -0
  25. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/datasets/__init__.py +0 -0
  26. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/datasets/client.py +0 -0
  27. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/datasets/requests/__init__.py +0 -0
  28. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/datasets/requests/create_dataset_request.py +0 -0
  29. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/datasets/requests/dataset.py +0 -0
  30. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/datasets/requests/dataset_file.py +0 -0
  31. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/datasets/requests/paginated_dataset_files.py +0 -0
  32. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/datasets/requests/paginated_datasets.py +0 -0
  33. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/datasets/types/__init__.py +0 -0
  34. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/datasets/types/create_dataset_request.py +0 -0
  35. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/datasets/types/dataset.py +0 -0
  36. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/datasets/types/dataset_file.py +0 -0
  37. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/datasets/types/file_purpose.py +0 -0
  38. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/datasets/types/paginated_dataset_files.py +0 -0
  39. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/datasets/types/paginated_datasets.py +0 -0
  40. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/embedding/__init__.py +0 -0
  41. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/embedding/types/__init__.py +0 -0
  42. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/embedding/types/embedding.py +0 -0
  43. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/environment.py +0 -0
  44. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/infill/__init__.py +0 -0
  45. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/infill/client.py +0 -0
  46. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/py.typed +0 -0
  47. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/__init__.py +0 -0
  48. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/_async_websocket.py +0 -0
  49. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/_websocket.py +0 -0
  50. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/client.py +0 -0
  51. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/__init__.py +0 -0
  52. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/cancel_context_request.py +0 -0
  53. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/controls.py +0 -0
  54. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/generation_request.py +0 -0
  55. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/mp_3_output_format.py +0 -0
  56. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/output_format.py +0 -0
  57. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/phoneme_timestamps.py +0 -0
  58. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/raw_output_format.py +0 -0
  59. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/speed.py +0 -0
  60. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/tts_request.py +0 -0
  61. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/tts_request_embedding_specifier.py +0 -0
  62. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/tts_request_id_specifier.py +0 -0
  63. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/tts_request_voice_specifier.py +0 -0
  64. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/wav_output_format.py +0 -0
  65. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/web_socket_base_response.py +0 -0
  66. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/web_socket_chunk_response.py +0 -0
  67. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/web_socket_done_response.py +0 -0
  68. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/web_socket_error_response.py +0 -0
  69. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/web_socket_flush_done_response.py +0 -0
  70. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/web_socket_phoneme_timestamps_response.py +0 -0
  71. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/web_socket_raw_output_format.py +0 -0
  72. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/web_socket_request.py +0 -0
  73. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/web_socket_response.py +0 -0
  74. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/web_socket_stream_options.py +0 -0
  75. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/web_socket_timestamps_response.py +0 -0
  76. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/web_socket_tts_output.py +0 -0
  77. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/web_socket_tts_request.py +0 -0
  78. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/requests/word_timestamps.py +0 -0
  79. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/socket_client.py +0 -0
  80. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/__init__.py +0 -0
  81. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/cancel_context_request.py +0 -0
  82. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/context_id.py +0 -0
  83. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/controls.py +0 -0
  84. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/emotion.py +0 -0
  85. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/flush_id.py +0 -0
  86. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/generation_request.py +0 -0
  87. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/mp_3_output_format.py +0 -0
  88. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/natural_specifier.py +0 -0
  89. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/numerical_specifier.py +0 -0
  90. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/output_format.py +0 -0
  91. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/phoneme_timestamps.py +0 -0
  92. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/raw_encoding.py +0 -0
  93. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/raw_output_format.py +0 -0
  94. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/speed.py +0 -0
  95. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/supported_language.py +0 -0
  96. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/tts_request.py +0 -0
  97. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/tts_request_embedding_specifier.py +0 -0
  98. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/tts_request_id_specifier.py +0 -0
  99. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/tts_request_voice_specifier.py +0 -0
  100. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/wav_output_format.py +0 -0
  101. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/web_socket_base_response.py +0 -0
  102. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/web_socket_chunk_response.py +0 -0
  103. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/web_socket_done_response.py +0 -0
  104. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/web_socket_error_response.py +0 -0
  105. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/web_socket_flush_done_response.py +0 -0
  106. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/web_socket_phoneme_timestamps_response.py +0 -0
  107. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/web_socket_raw_output_format.py +0 -0
  108. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/web_socket_request.py +0 -0
  109. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/web_socket_response.py +0 -0
  110. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/web_socket_stream_options.py +0 -0
  111. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/web_socket_timestamps_response.py +0 -0
  112. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/web_socket_tts_output.py +0 -0
  113. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/web_socket_tts_request.py +0 -0
  114. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/types/word_timestamps.py +0 -0
  115. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/utils/constants.py +0 -0
  116. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/utils/tts.py +0 -0
  117. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/tts/utils/types.py +0 -0
  118. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/version.py +0 -0
  119. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voice_changer/__init__.py +0 -0
  120. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voice_changer/client.py +0 -0
  121. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voice_changer/requests/__init__.py +0 -0
  122. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voice_changer/requests/streaming_response.py +0 -0
  123. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voice_changer/types/__init__.py +0 -0
  124. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voice_changer/types/output_format_container.py +0 -0
  125. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voice_changer/types/streaming_response.py +0 -0
  126. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/__init__.py +0 -0
  127. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/client.py +0 -0
  128. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/requests/__init__.py +0 -0
  129. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/requests/create_voice_request.py +0 -0
  130. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/requests/embedding_response.py +0 -0
  131. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/requests/embedding_specifier.py +0 -0
  132. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/requests/id_specifier.py +0 -0
  133. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/requests/localize_dialect.py +0 -0
  134. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/requests/localize_voice_request.py +0 -0
  135. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/requests/mix_voice_specifier.py +0 -0
  136. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/requests/mix_voices_request.py +0 -0
  137. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/requests/update_voice_request.py +0 -0
  138. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/requests/voice.py +0 -0
  139. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/requests/voice_metadata.py +0 -0
  140. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/__init__.py +0 -0
  141. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/base_voice_id.py +0 -0
  142. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/clone_mode.py +0 -0
  143. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/create_voice_request.py +0 -0
  144. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/embedding_response.py +0 -0
  145. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/embedding_specifier.py +0 -0
  146. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/gender.py +0 -0
  147. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/id_specifier.py +0 -0
  148. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/localize_dialect.py +0 -0
  149. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/localize_english_dialect.py +0 -0
  150. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/localize_portuguese_dialect.py +0 -0
  151. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/localize_spanish_dialect.py +0 -0
  152. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/localize_target_language.py +0 -0
  153. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/localize_voice_request.py +0 -0
  154. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/mix_voice_specifier.py +0 -0
  155. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/mix_voices_request.py +0 -0
  156. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/update_voice_request.py +0 -0
  157. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/voice.py +0 -0
  158. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/voice_id.py +0 -0
  159. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/voice_metadata.py +0 -0
  160. {cartesia-2.0.0a2 → cartesia-2.0.0b2}/src/cartesia/voices/types/weight.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cartesia
3
- Version: 2.0.0a2
3
+ Version: 2.0.0b2
4
4
  Summary:
5
5
  Requires-Python: >=3.8,<4.0
6
6
  Classifier: Intended Audience :: Developers
@@ -57,7 +57,7 @@ A full reference for this library is available [here](./reference.md).
57
57
  from cartesia import Cartesia
58
58
  import os
59
59
 
60
- client = Cartesia(api_key=os.environ.get("CARTESIA_API_KEY"))
60
+ client = Cartesia(api_key=os.getenv("CARTESIA_API_KEY"))
61
61
 
62
62
  # Get all available voices
63
63
  voices = client.voices.list()
@@ -65,21 +65,32 @@ print(voices)
65
65
 
66
66
  # Get a specific voice
67
67
  voice = client.voices.get(id="a0e99841-438c-4a64-b679-ae501e7d6091")
68
- print("The embedding for", voice["name"], "is", voice["embedding"])
68
+ print("The embedding for", voice.name, "is", voice.embedding)
69
69
 
70
- # Clone a voice using filepath
71
- cloned_voice_embedding = client.voices.clone(filepath="path/to/voice")
70
+ # Clone a voice using file data
71
+ cloned_voice = client.voices.clone(
72
+ clip=open("path/to/voice.wav", "rb"),
73
+ name="Test cloned voice",
74
+ language="en",
75
+ mode="similarity", # or "stability"
76
+ enhance=False, # use enhance=True to clean and denoise the cloning audio
77
+ description="Test voice description"
78
+ )
72
79
 
73
80
  # Mix voices together
74
- mixed_voice_embedding = client.voices.mix(
75
- [{ "id": "voice_id_1", "weight": 0.5 }, { "id": "voice_id_2", "weight": 0.25 }, { "id": "voice_id_3", "weight": 0.25 }]
81
+ mixed_voice = client.voices.mix(
82
+ voices=[
83
+ {"id": "voice_id_1", "weight": 0.25},
84
+ {"id": "voice_id_2", "weight": 0.75}
85
+ ]
76
86
  )
77
87
 
78
- # Create a new voice
88
+ # Create a new voice from embedding
79
89
  new_voice = client.voices.create(
80
- name="New Voice",
81
- description="A clone of my own voice",
82
- embedding=cloned_voice_embedding,
90
+ name="Test Voice",
91
+ description="Test voice description",
92
+ embedding=[...], # List[float] with 192 dimensions
93
+ language="en"
83
94
  )
84
95
  ```
85
96
 
@@ -90,15 +101,22 @@ Instantiate and use the client with the following:
90
101
  ```python
91
102
  from cartesia import Cartesia
92
103
  from cartesia.tts import OutputFormat_Raw, TtsRequestIdSpecifier
104
+ import os
93
105
 
94
106
  client = Cartesia(
95
- api_key="YOUR_API_KEY",
107
+ api_key=os.getenv("CARTESIA_API_KEY"),
96
108
  )
97
109
  client.tts.bytes(
98
110
  model_id="sonic-english",
99
111
  transcript="Hello, world!",
100
- voice={"id": "694f9389-aac1-45b6-b726-9d9369183238"},
101
- ),
112
+ voice={
113
+ "mode": "id",
114
+ "id": "694f9389-aac1-45b6-b726-9d9369183238",
115
+ "experimental_controls": {
116
+ "speed": 0.5, # range between [-1.0, 1.0], or "slow", "fastest", etc.
117
+ "emotion": ["positivity", "curiosity:low"] # list of emotions with optional intensity
118
+ }
119
+ },
102
120
  language="en",
103
121
  output_format={
104
122
  "container": "raw",
@@ -114,17 +132,17 @@ The SDK also exports an `async` client so that you can make non-blocking calls t
114
132
 
115
133
  ```python
116
134
  import asyncio
135
+ import os
117
136
 
118
137
  from cartesia import AsyncCartesia
119
138
  from cartesia.tts import OutputFormat_Raw, TtsRequestIdSpecifier
120
139
 
121
140
  client = AsyncCartesia(
122
- api_key="YOUR_API_KEY",
141
+ api_key=os.getenv("CARTESIA_API_KEY"),
123
142
  )
124
143
 
125
-
126
144
  async def main() -> None:
127
- await client.tts.bytes(
145
+ async for output in client.tts.bytes(
128
146
  model_id="sonic-english",
129
147
  transcript="Hello, world!",
130
148
  voice={"id": "694f9389-aac1-45b6-b726-9d9369183238"},
@@ -134,7 +152,8 @@ async def main() -> None:
134
152
  "sample_rate": 44100,
135
153
  "encoding": "pcm_f32le",
136
154
  },
137
- )
155
+ ):
156
+ print(f"Received chunk of size: {len(output)}")
138
157
 
139
158
 
140
159
  asyncio.run(main())
@@ -162,26 +181,38 @@ The SDK supports streaming responses, as well, the response will be a generator
162
181
  ```python
163
182
  from cartesia import Cartesia
164
183
  from cartesia.tts import Controls, OutputFormat_RawParams, TtsRequestIdSpecifierParams
184
+ import os
165
185
 
166
- client = Cartesia(
167
- api_key="YOUR_API_KEY",
168
- )
169
- response = client.tts.sse(
170
- model_id="string",
171
- transcript="string",
172
- voice={
173
- "id": "string",
174
- "experimental_controls": {
175
- speed=1.1,
176
- emotion="anger:lowest",
186
+ def get_tts_chunks():
187
+ client = Cartesia(
188
+ api_key=os.getenv("CARTESIA_API_KEY"),
189
+ )
190
+ response = client.tts.sse(
191
+ model_id="sonic",
192
+ transcript="Hello world!",
193
+ voice={
194
+ "id": "f9836c6e-a0bd-460e-9d3c-f7299fa60f94",
195
+ "experimental_controls": {
196
+ "speed": "normal",
197
+ "emotion": [],
198
+ },
177
199
  },
178
- },
179
- language="en",
180
- output_format={},
181
- duration=1.1,
182
- )
183
- for chunk in response:
184
- yield chunk
200
+ language="en",
201
+ output_format={
202
+ "container": "raw",
203
+ "encoding": "pcm_f32le",
204
+ "sample_rate": 44100,
205
+ },
206
+ )
207
+
208
+ audio_chunks = []
209
+ for chunk in response:
210
+ audio_chunks.append(chunk)
211
+ return audio_chunks
212
+
213
+ chunks = get_tts_chunks()
214
+ for chunk in chunks:
215
+ print(f"Received chunk of size: {len(chunk.data)}")
185
216
  ```
186
217
 
187
218
  ## WebSocket
@@ -190,16 +221,16 @@ for chunk in response:
190
221
  from cartesia import Cartesia
191
222
  from cartesia.tts import TtsRequestEmbeddingSpecifierParams, OutputFormat_RawParams
192
223
  import pyaudio
224
+ import os
193
225
 
194
226
  client = Cartesia(
195
- api_key="YOUR_API_KEY",
227
+ api_key=os.getenv("CARTESIA_API_KEY"),
196
228
  )
197
229
  voice_id = "a0e99841-438c-4a64-b679-ae501e7d6091"
198
- voice = client.voices.get(id=voice_id)
199
230
  transcript = "Hello! Welcome to Cartesia"
200
231
 
201
232
  # You can check out our models at https://docs.cartesia.ai/getting-started/available-models
202
- model_id = "sonic-english"
233
+ model_id = "sonic"
203
234
 
204
235
  p = pyaudio.PyAudio()
205
236
  rate = 22050
@@ -213,7 +244,7 @@ ws = client.tts.websocket()
213
244
  for output in ws.send(
214
245
  model_id=model_id,
215
246
  transcript=transcript,
216
- voice={"embedding": voice.embedding},
247
+ voice={"id": voice_id},
217
248
  stream=True,
218
249
  output_format={
219
250
  "container": "raw",
@@ -25,7 +25,7 @@ A full reference for this library is available [here](./reference.md).
25
25
  from cartesia import Cartesia
26
26
  import os
27
27
 
28
- client = Cartesia(api_key=os.environ.get("CARTESIA_API_KEY"))
28
+ client = Cartesia(api_key=os.getenv("CARTESIA_API_KEY"))
29
29
 
30
30
  # Get all available voices
31
31
  voices = client.voices.list()
@@ -33,21 +33,32 @@ print(voices)
33
33
 
34
34
  # Get a specific voice
35
35
  voice = client.voices.get(id="a0e99841-438c-4a64-b679-ae501e7d6091")
36
- print("The embedding for", voice["name"], "is", voice["embedding"])
36
+ print("The embedding for", voice.name, "is", voice.embedding)
37
37
 
38
- # Clone a voice using filepath
39
- cloned_voice_embedding = client.voices.clone(filepath="path/to/voice")
38
+ # Clone a voice using file data
39
+ cloned_voice = client.voices.clone(
40
+ clip=open("path/to/voice.wav", "rb"),
41
+ name="Test cloned voice",
42
+ language="en",
43
+ mode="similarity", # or "stability"
44
+ enhance=False, # use enhance=True to clean and denoise the cloning audio
45
+ description="Test voice description"
46
+ )
40
47
 
41
48
  # Mix voices together
42
- mixed_voice_embedding = client.voices.mix(
43
- [{ "id": "voice_id_1", "weight": 0.5 }, { "id": "voice_id_2", "weight": 0.25 }, { "id": "voice_id_3", "weight": 0.25 }]
49
+ mixed_voice = client.voices.mix(
50
+ voices=[
51
+ {"id": "voice_id_1", "weight": 0.25},
52
+ {"id": "voice_id_2", "weight": 0.75}
53
+ ]
44
54
  )
45
55
 
46
- # Create a new voice
56
+ # Create a new voice from embedding
47
57
  new_voice = client.voices.create(
48
- name="New Voice",
49
- description="A clone of my own voice",
50
- embedding=cloned_voice_embedding,
58
+ name="Test Voice",
59
+ description="Test voice description",
60
+ embedding=[...], # List[float] with 192 dimensions
61
+ language="en"
51
62
  )
52
63
  ```
53
64
 
@@ -58,15 +69,22 @@ Instantiate and use the client with the following:
58
69
  ```python
59
70
  from cartesia import Cartesia
60
71
  from cartesia.tts import OutputFormat_Raw, TtsRequestIdSpecifier
72
+ import os
61
73
 
62
74
  client = Cartesia(
63
- api_key="YOUR_API_KEY",
75
+ api_key=os.getenv("CARTESIA_API_KEY"),
64
76
  )
65
77
  client.tts.bytes(
66
78
  model_id="sonic-english",
67
79
  transcript="Hello, world!",
68
- voice={"id": "694f9389-aac1-45b6-b726-9d9369183238"},
69
- ),
80
+ voice={
81
+ "mode": "id",
82
+ "id": "694f9389-aac1-45b6-b726-9d9369183238",
83
+ "experimental_controls": {
84
+ "speed": 0.5, # range between [-1.0, 1.0], or "slow", "fastest", etc.
85
+ "emotion": ["positivity", "curiosity:low"] # list of emotions with optional intensity
86
+ }
87
+ },
70
88
  language="en",
71
89
  output_format={
72
90
  "container": "raw",
@@ -82,17 +100,17 @@ The SDK also exports an `async` client so that you can make non-blocking calls t
82
100
 
83
101
  ```python
84
102
  import asyncio
103
+ import os
85
104
 
86
105
  from cartesia import AsyncCartesia
87
106
  from cartesia.tts import OutputFormat_Raw, TtsRequestIdSpecifier
88
107
 
89
108
  client = AsyncCartesia(
90
- api_key="YOUR_API_KEY",
109
+ api_key=os.getenv("CARTESIA_API_KEY"),
91
110
  )
92
111
 
93
-
94
112
  async def main() -> None:
95
- await client.tts.bytes(
113
+ async for output in client.tts.bytes(
96
114
  model_id="sonic-english",
97
115
  transcript="Hello, world!",
98
116
  voice={"id": "694f9389-aac1-45b6-b726-9d9369183238"},
@@ -102,7 +120,8 @@ async def main() -> None:
102
120
  "sample_rate": 44100,
103
121
  "encoding": "pcm_f32le",
104
122
  },
105
- )
123
+ ):
124
+ print(f"Received chunk of size: {len(output)}")
106
125
 
107
126
 
108
127
  asyncio.run(main())
@@ -130,26 +149,38 @@ The SDK supports streaming responses, as well, the response will be a generator
130
149
  ```python
131
150
  from cartesia import Cartesia
132
151
  from cartesia.tts import Controls, OutputFormat_RawParams, TtsRequestIdSpecifierParams
152
+ import os
133
153
 
134
- client = Cartesia(
135
- api_key="YOUR_API_KEY",
136
- )
137
- response = client.tts.sse(
138
- model_id="string",
139
- transcript="string",
140
- voice={
141
- "id": "string",
142
- "experimental_controls": {
143
- speed=1.1,
144
- emotion="anger:lowest",
154
+ def get_tts_chunks():
155
+ client = Cartesia(
156
+ api_key=os.getenv("CARTESIA_API_KEY"),
157
+ )
158
+ response = client.tts.sse(
159
+ model_id="sonic",
160
+ transcript="Hello world!",
161
+ voice={
162
+ "id": "f9836c6e-a0bd-460e-9d3c-f7299fa60f94",
163
+ "experimental_controls": {
164
+ "speed": "normal",
165
+ "emotion": [],
166
+ },
145
167
  },
146
- },
147
- language="en",
148
- output_format={},
149
- duration=1.1,
150
- )
151
- for chunk in response:
152
- yield chunk
168
+ language="en",
169
+ output_format={
170
+ "container": "raw",
171
+ "encoding": "pcm_f32le",
172
+ "sample_rate": 44100,
173
+ },
174
+ )
175
+
176
+ audio_chunks = []
177
+ for chunk in response:
178
+ audio_chunks.append(chunk)
179
+ return audio_chunks
180
+
181
+ chunks = get_tts_chunks()
182
+ for chunk in chunks:
183
+ print(f"Received chunk of size: {len(chunk.data)}")
153
184
  ```
154
185
 
155
186
  ## WebSocket
@@ -158,16 +189,16 @@ for chunk in response:
158
189
  from cartesia import Cartesia
159
190
  from cartesia.tts import TtsRequestEmbeddingSpecifierParams, OutputFormat_RawParams
160
191
  import pyaudio
192
+ import os
161
193
 
162
194
  client = Cartesia(
163
- api_key="YOUR_API_KEY",
195
+ api_key=os.getenv("CARTESIA_API_KEY"),
164
196
  )
165
197
  voice_id = "a0e99841-438c-4a64-b679-ae501e7d6091"
166
- voice = client.voices.get(id=voice_id)
167
198
  transcript = "Hello! Welcome to Cartesia"
168
199
 
169
200
  # You can check out our models at https://docs.cartesia.ai/getting-started/available-models
170
- model_id = "sonic-english"
201
+ model_id = "sonic"
171
202
 
172
203
  p = pyaudio.PyAudio()
173
204
  rate = 22050
@@ -181,7 +212,7 @@ ws = client.tts.websocket()
181
212
  for output in ws.send(
182
213
  model_id=model_id,
183
214
  transcript=transcript,
184
- voice={"embedding": voice.embedding},
215
+ voice={"id": voice_id},
185
216
  stream=True,
186
217
  output_format={
187
218
  "container": "raw",
@@ -3,7 +3,7 @@ name = "cartesia"
3
3
 
4
4
  [tool.poetry]
5
5
  name = "cartesia"
6
- version = "2.0.0a2"
6
+ version = "2.0.0b2"
7
7
  description = ""
8
8
  readme = "README.md"
9
9
  authors = []
@@ -16,7 +16,7 @@ class BaseClientWrapper:
16
16
  headers: typing.Dict[str, str] = {
17
17
  "X-Fern-Language": "Python",
18
18
  "X-Fern-SDK-Name": "cartesia",
19
- "X-Fern-SDK-Version": "2.0.0a2",
19
+ "X-Fern-SDK-Version": "2.0.0b2",
20
20
  }
21
21
  headers["X-API-Key"] = self.api_key
22
22
  headers["Cartesia-Version"] = "2024-06-10"