SSML e LaTeX
Controle a velocidade de fala, pausas e pronúncia com SSML, ou converta fórmulas LaTeX para a fala natural
Ambos os recursos funcionam com CosyVoice Modelos.
Visão geral
SSML é uma linguagem de marcação baseada em XML para síntese de fala. Incorpore etiquetas SSML em seu texto para controlar a velocidade de fala, pitch, pausas e volume, e para adicionar música de fundo e efeitos sonoros para uma produção de fala mais rica.
CosyVoice Também analisa fórmulas de LaTeX inseridas em texto e as lê como uma pessoa faria. Isso combina com educação online, audiolivros e outros conteúdos que contêm fórmulas matemáticas.
Casos típicos de uso:
- Audiobooks: controle pausas e velocidade de fala, e adicione música de fundo para imersão
- ** Serviço ao cliente**: use o
<say-as>Então, números de telefone e datas são lidos corretamente. -
- Anúncios multilingues *
<phoneme>Tag para especificar a pronúncia de palavras estrangeiras
- Anúncios multilingues *
-
- Educação on-line**: converter fórmulas matemáticas para a fala natural com LaTeX para a fala
Ambas as características funcionam com o CosyVoice Série de modelos. Para ajudar a escolher um modelo, veja [Modelos de síntese de voz] (/developer-guides/speech/tts-models).
Língua de marcação SSML
Limitações
- *Modelos: * qwen-audio-3.0-tts-flash, qwen-audio-3.0-tts-plus, cosyvoice-v3-flash, cosyvoice-v3-plus.
- Vozes: Vozes clonadas e vozes do sistema marcadas como SSML-inabilitadas noCosyVoice Lista de voz./developer-guides/speech/voice-list/cosyvoice).
- ** APIS:**
- Não-streaming e transmissão unidirecional. Veja o [Java SDK Docs] (/api-reference/speech-synthesis/cosyvoice/java-sdk).
- Não-streaming e transmissão unidirecional apenas. Veja o [Python SDK Docs] (/api-reference/speech-synthesis/cosyvoice/python-sdk).
- WebSocket API:
enable_ssmlparatrueEm execução e enviar continuar a tarefa apenas uma vez. Veja o [WebSocket API Docs] (/api-reference/speech-synthesis/cosyvoice/websocket-api). - API HTTP: definido
enable_ssmlparatrue.
Começando.
Para pré-requisitos e tutoriais, veja Texto-para-falar - CosyVoice. Verifique as [Limitações] (#limitations) seção para modelos, vozes e APIs suportados antes de usar SSML.
Java SDK
import com.alibaba.dashscope.audio.ttsv2.SpeechSynthesisParam;
import com.alibaba.dashscope.audio.ttsv2.SpeechSynthesizer;
import com.alibaba.dashscope.utils.Constants;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
// See SSML support requirements in the note above
public class Main {
private static String model = "cosyvoice-v3-flash";
private static String voice = "longanyang";
public static void main(String[] args) {
Constants.baseWebsocketApiUrl = "wss://maas.qwencloudapi.com/api-ws/v1/inference";
streamAudioDataToSpeaker();
System.exit(0);
}
public static void streamAudioDataToSpeaker() {
SpeechSynthesisParam param =
SpeechSynthesisParam.builder()
// If you have not configured an environment variable, replace the following line with: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model(model)
.voice(voice)
.build();
SpeechSynthesizer synthesizer = new SpeechSynthesizer(param, null);
ByteBuffer audio = null;
try {
// Non-streaming call; blocks until audio is returned
// Escape special characters
audio = synthesizer.call("<speak rate=\"2\">My speaking rate is faster than a normal person's.</speak>");
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
// Close the WebSocket connection after the task ends
synthesizer.getDuplexApi().close(1000, "bye");
}
if (audio != null) {
// Save the audio data to a local file named "output.mp3"
File file = new File("output.mp3");
try (FileOutputStream fos = new FileOutputStream(file)) {
fos.write(audio.array());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
// The first packet latency includes the time required to establish the WebSocket connection
System.out.println(
"[Metric] Request ID: "
+ synthesizer.getLastRequestId()
+ ", First packet latency (ms): "
+ synthesizer.getFirstPackageDelay());
}
}
import com.alibaba.dashscope.audio.tts.SpeechSynthesisResult;
import com.alibaba.dashscope.audio.ttsv2.SpeechSynthesisAudioFormat;
import com.alibaba.dashscope.audio.ttsv2.SpeechSynthesisParam;
import com.alibaba.dashscope.audio.ttsv2.SpeechSynthesizer;
import com.alibaba.dashscope.common.ResultCallback;
import com.alibaba.dashscope.utils.Constants;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
// See SSML support requirements in the note above
public class Main {
private static String model = "cosyvoice-v3-flash";
private static String voice = "longanyang";
public static void main(String[] args) {
Constants.baseWebsocketApiUrl = "wss://maas.qwencloudapi.com/api-ws/v1/inference";
streamAudioDataToSpeaker();
System.out.println("Audio saved to output.mp3");
System.exit(0);
}
public static void streamAudioDataToSpeaker() {
CountDownLatch latch = new CountDownLatch(1);
final FileOutputStream[] fileOutputStream = new FileOutputStream[1];
try {
fileOutputStream[0] = new FileOutputStream("output.mp3");
} catch (IOException e) {
System.err.println("Failed to create output file: " + e.getMessage());
return;
}
// Implement the ResultCallback interface
ResultCallback<SpeechSynthesisResult> callback = new ResultCallback<SpeechSynthesisResult>() {
@Override
public void onEvent(SpeechSynthesisResult result) {
if (result.getAudioFrame() != null) {
// Write audio data to a local file
try {
byte[] audioData = result.getAudioFrame().array();
fileOutputStream[0].write(audioData);
fileOutputStream[0].flush();
} catch (IOException e) {
System.err.println("Failed to write audio data: " + e.getMessage());
}
}
}
@Override
public void onComplete() {
System.out.println("Received Complete; speech synthesis finished");
closeFileOutputStream(fileOutputStream[0]);
latch.countDown();
}
@Override
public void onError(Exception e) {
System.out.println("Error occurred: " + e.toString());
closeFileOutputStream(fileOutputStream[0]);
latch.countDown();
}
};
SpeechSynthesisParam param =
SpeechSynthesisParam.builder()
// If you have not configured an environment variable, replace the following line with: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model(model)
.voice(voice)
.format(SpeechSynthesisAudioFormat.MP3_22050HZ_MONO_256KBPS)
.build();
SpeechSynthesizer synthesizer = new SpeechSynthesizer(param, callback);
try {
// Unidirectional streaming call; returns null immediately (results are delivered asynchronously through the callback)
// Escape special characters
synthesizer.call("<speak rate=\"2\">My speaking rate is faster than a normal person's.</speak>");
// Wait for synthesis to complete
latch.await();
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
// Close the WebSocket connection after the task ends
try {
synthesizer.getDuplexApi().close(1000, "bye");
} catch (Exception e) {
System.err.println("Failed to close WebSocket connection: " + e.getMessage());
}
// Ensure the file stream is closed
closeFileOutputStream(fileOutputStream[0]);
}
// The first packet latency includes the time required to establish the WebSocket connection
System.out.println(
"[Metric] Request ID: "
+ synthesizer.getLastRequestId()
+ ", First packet latency (ms): "
+ synthesizer.getFirstPackageDelay());
}
private static void closeFileOutputStream(FileOutputStream fileOutputStream) {
try {
if (fileOutputStream != null) {
fileOutputStream.close();
}
} catch (IOException e) {
System.err.println("Failed to close file stream: " + e.getMessage());
}
}
}
Python SDK
# coding=utf-8
# See SSML support requirements in the note above
import dashscope
from dashscope.audio.tts_v2 import *
import os
# If you have not configured an environment variable, replace the following line with: dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')
dashscope.base_websocket_api_url='wss://maas.qwencloudapi.com/api-ws/v1/inference'
# Model
model = "cosyvoice-v3-flash"
# Voice
voice = "longanyang"
# Instantiate SpeechSynthesizer and pass model, voice, and other request parameters to the constructor
synthesizer = SpeechSynthesizer(model=model, voice=voice)
# Non-streaming call; blocks until audio is returned
# Escape special characters
audio = synthesizer.call("<speak rate=\"2\">My speaking rate is faster than a normal person's.</speak>")
# Save the audio locally
with open('output.mp3', 'wb') as f:
f.write(audio)
# The first packet latency includes the time required to establish the WebSocket connection
print('[Metric] Request ID: {}, First packet latency: {} ms'.format(
synthesizer.get_last_request_id(),
synthesizer.get_first_package_delay()))
# coding=utf-8
# See SSML support requirements in the note above
import dashscope
from dashscope.audio.tts_v2 import *
import os
from datetime import datetime
def get_timestamp():
now = datetime.now()
formatted_timestamp = now.strftime("[%Y-%m-%d %H:%M:%S.%f]")
return formatted_timestamp
# If you have not configured an environment variable, replace the following line with: dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')
dashscope.base_websocket_api_url='wss://maas.qwencloudapi.com/api-ws/v1/inference'
# Model
model = "cosyvoice-v3-flash"
# Voice
voice = "longanyang"
# Define callback interface
class Callback(ResultCallback):
_player = None
_stream = None
def on_open(self):
# Open output file to write audio data
self.file = open("output.mp3", "wb")
print("Connection established: " + get_timestamp())
def on_complete(self):
print("Speech synthesis completed; all results received: " + get_timestamp())
if hasattr(self, 'file') and self.file:
self.file.close()
# The first packet latency includes the time required to establish the WebSocket connection
print('[Metric] Request ID: {}, First packet latency: {} ms'.format(
self.synthesizer.get_last_request_id(),
self.synthesizer.get_first_package_delay()))
def on_error(self, message: str):
print(f"Speech synthesis error: {message}")
if hasattr(self, 'file') and self.file:
self.file.close()
def on_close(self):
print("Connection closed: " + get_timestamp())
if hasattr(self, 'file') and self.file:
self.file.close()
def on_event(self, message):
pass
def on_data(self, data: bytes) -> None:
print(get_timestamp() + " Binary audio length: " + str(len(data)))
# Write audio data to file
self.file.write(data)
callback = Callback()
# Instantiate SpeechSynthesizer and pass model, voice, and other request parameters to the constructor
synthesizer = SpeechSynthesizer(
model=model,
voice=voice,
callback=callback,
)
# Assign the synthesizer instance to callback for use in on_complete
callback.synthesizer = synthesizer
# Unidirectional streaming call; send text to synthesize and receive binary audio in real time via the on_data method of the callback
# Escape special characters
synthesizer.call("<speak rate=\"2\">My speaking rate is faster than a normal person's.</speak>")
API WebSocket
Go
```go
// See SSML support requirements in the note above
package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
"strings"
"time"
"github.com/google/uuid"
"github.com/gorilla/websocket"
)
const (
wsURL = "wss://maas.qwencloudapi.com/api-ws/v1/inference/"
outputFile = "output.mp3"
)
func main() {
// If you have not configured an environment variable, replace the following line with: apiKey := "sk-xxx"
apiKey := os.Getenv("DASHSCOPE_API_KEY")
// Clear the output file
os.Remove(outputFile)
os.Create(outputFile)
// Connect to WebSocket
header := make(http.Header)
header.Add("X-DashScope-DataInspection", "enable")
header.Add("Authorization", fmt.Sprintf("bearer %s", apiKey))
conn, resp, err := websocket.DefaultDialer.Dial(wsURL, header)
if err != nil {
if resp != nil {
fmt.Printf("Connection failed. HTTP status code: %d\n", resp.StatusCode)
}
fmt.Println("Connection failed:", err)
return
}
defer conn.Close()
// Generate task ID
taskID := uuid.New().String()
fmt.Printf("Generated task ID: %s\n", taskID)
// Send run-task command
runTaskCmd := map[string]interface{}{
"header": map[string]interface{}{
"action": "run-task",
"task_id": taskID,
"streaming": "duplex",
},
"payload": map[string]interface{}{
"task_group": "audio",
"task": "tts",
"function": "SpeechSynthesizer",
"model": "cosyvoice-v3-flash",
"parameters": map[string]interface{}{
"text_type": "PlainText",
"voice": "longanyang",
"format": "mp3",
"sample_rate": 22050,
"volume": 50,
"rate": 1,
"pitch": 1,
// With enable_ssml: true, send continue-task only once
"enable_ssml": true,
},
"input": map[string]interface{}{},
},
}
runTaskJSON, _ := json.Marshal(runTaskCmd)
fmt.Printf("Sending run-task command: %s\n", string(runTaskJSON))
err = conn.WriteMessage(websocket.TextMessage, runTaskJSON)
if err != nil {
fmt.Println("Failed to send run-task:", err)
return
}
textSent := false
// Process messages
for {
messageType, message, err := conn.ReadMessage()
if err != nil {
fmt.Println("Failed to read message:", err)
break
}
// Handle binary messages
if messageType == websocket.BinaryMessage {
fmt.Printf("Received binary message, length: %d\n", len(message))
file, _ := os.OpenFile(outputFile, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)
file.Write(message)
file.Close()
continue
}
// Handle text messages
messageStr := string(message)
fmt.Printf("Received text message: %s\n", strings.ReplaceAll(messageStr, "\n", ""))
// Parse JSON to get event type
var msgMap map[string]interface{}
if json.Unmarshal(message, &msgMap) == nil {
if header, ok := msgMap["header"].(map[string]interface{}); ok {
if event, ok := header["event"].(string); ok {
fmt.Printf("Event type: %s\n", event)
switch event {
case "task-started":
fmt.Println("=== Received task-started event ===")
if !textSent {
// Send continue-task command; when using SSML, you can send this command only once
continueTaskCmd := map[string]interface{}{
"header": map[string]interface{}{
"action": "continue-task",
"task_id": taskID,
"streaming": "duplex",
},
"payload": map[string]interface{}{
"input": map[string]interface{}{
// Escape special characters
"text": "<speak rate=\"2\">My speaking rate is faster than a normal person's.</speak>",
},
},
}
continueTaskJSON, _ := json.Marshal(continueTaskCmd)
fmt.Printf("Sending continue-task command: %s\n", string(continueTaskJSON))
err = conn.WriteMessage(websocket.TextMessage, continueTaskJSON)
if err != nil {
fmt.Println("Failed to send continue-task:", err)
return
}
textSent = true
// Delay sending finish-task
time.Sleep(500 * time.Millisecond)
// Send finish-task command
finishTaskCmd := map[string]interface{}{
"header": map[string]interface{}{
"action": "finish-task",
"task_id": taskID,
"streaming": "duplex",
},
"payload": map[string]interface{}{
"input": map[string]interface{}{},
},
}
finishTaskJSON, _ := json.Marshal(finishTaskCmd)
fmt.Printf("Sending finish-task command: %s\n", string(finishTaskJSON))
err = conn.WriteMessage(websocket.TextMessage, finishTaskJSON)
if err != nil {
fmt.Println("Failed to send finish-task:", err)
return
}
}
case "task-finished":
fmt.Println("=== Task finished ===")
return
case "task-failed":
fmt.Println("=== Task failed ===")
if header["error_message"] != nil {
fmt.Printf("Error message: %s\n", header["error_message"])
}
return
case "result-generated":
fmt.Println("Received result-generated event")
}
}
}
}
}
}
```
C#
```csharp
using System.Net.WebSockets;
using System.Text;
using System.Text.Json;
// See SSML support requirements in the note above
class Program {
// If you have not configured an environment variable, replace the following line with: private static readonly string ApiKey = "sk-xxx"
private static readonly string ApiKey = Environment.GetEnvironmentVariable("DASHSCOPE_API_KEY") ?? throw new InvalidOperationException("DASHSCOPE_API_KEY environment variable is not set.");
private const string WebSocketUrl = "wss://maas.qwencloudapi.com/api-ws/v1/inference/";
// Output file path
private const string OutputFilePath = "output.mp3";
// WebSocket client
private static ClientWebSocket _webSocket = new ClientWebSocket();
// Cancellation token source
private static CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource();
// Task ID
private static string? _taskId;
// Whether the task has started
private static TaskCompletionSource<bool> _taskStartedTcs = new TaskCompletionSource<bool>();
static async Task Main(string[] args) {
try {
// Clear the output file
ClearOutputFile(OutputFilePath);
// Connect to WebSocket service
await ConnectToWebSocketAsync(WebSocketUrl);
// Start the task to receive messages
Task receiveTask = ReceiveMessagesAsync();
// Send run-task command
_taskId = GenerateTaskId();
await SendRunTaskCommandAsync(_taskId);
// Wait for the task-started event
await _taskStartedTcs.Task;
// Send the continue-task command. When using the SSML feature, this command can be sent only once.
// Special characters need to be escaped.
await SendContinueTaskCommandAsync("<speak rate=\"2\">My speaking rate is faster than a normal person's.</speak>");
// Send the finish-task command
await SendFinishTaskCommandAsync(_taskId);
// Wait for the receive task to complete
await receiveTask;
Console.WriteLine("Task completed, connection closed.");
} catch (OperationCanceledException) {
Console.WriteLine("The task was canceled.");
} catch (Exception ex) {
Console.WriteLine($"An error occurred: {ex.Message}");
} finally {
_cancellationTokenSource.Cancel();
_webSocket.Dispose();
}
}
private static void ClearOutputFile(string filePath) {
if (File.Exists(filePath)) {
File.WriteAllText(filePath, string.Empty);
Console.WriteLine("The output file has been cleared.");
} else {
Console.WriteLine("The output file does not exist and does not need to be cleared.");
}
}
private static async Task ConnectToWebSocketAsync(string url) {
var uri = new Uri(url);
if (_webSocket.State == WebSocketState.Connecting || _webSocket.State == WebSocketState.Open) {
return;
}
// Set headers for the WebSocket connection
_webSocket.Options.SetRequestHeader("Authorization", $"bearer {ApiKey}");
_webSocket.Options.SetRequestHeader("X-DashScope-DataInspection", "enable");
try {
await _webSocket.ConnectAsync(uri, _cancellationTokenSource.Token);
Console.WriteLine("Successfully connected to the WebSocket service.");
} catch (OperationCanceledException) {
Console.WriteLine("WebSocket connection was canceled.");
} catch (Exception ex) {
Console.WriteLine($"WebSocket connection failed: {ex.Message}");
throw;
}
}
private static async Task SendRunTaskCommandAsync(string taskId) {
var command = CreateCommand("run-task", taskId, "duplex", new {
task_group = "audio",
task = "tts",
function = "SpeechSynthesizer",
model = "cosyvoice-v3-flash",
parameters = new
{
text_type = "PlainText",
voice = "longanyang",
format = "mp3",
sample_rate = 22050,
volume = 50,
rate = 1,
pitch = 1,
// With enable_ssml: true, send continue-task only once
enable_ssml = true
},
input = new { }
});
await SendJsonMessageAsync(command);
Console.WriteLine("Sent run-task command.");
}
private static async Task SendContinueTaskCommandAsync(string text) {
if (_taskId == null) {
throw new InvalidOperationException("Task ID is not initialized.");
}
var command = CreateCommand("continue-task", _taskId, "duplex", new {
input = new {
text
}
});
await SendJsonMessageAsync(command);
Console.WriteLine("Sent continue-task command.");
}
private static async Task SendFinishTaskCommandAsync(string taskId) {
var command = CreateCommand("finish-task", taskId, "duplex", new {
input = new { }
});
await SendJsonMessageAsync(command);
Console.WriteLine("Sent finish-task command.");
}
private static async Task SendJsonMessageAsync(string message) {
var buffer = Encoding.UTF8.GetBytes(message);
try {
await _webSocket.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, _cancellationTokenSource.Token);
} catch (OperationCanceledException) {
Console.WriteLine("Message sending was canceled.");
}
}
private static async Task ReceiveMessagesAsync() {
while (_webSocket.State == WebSocketState.Open) {
var response = await ReceiveMessageAsync();
if (response != null) {
var eventStr = response.RootElement.GetProperty("header").GetProperty("event").GetString();
switch (eventStr) {
case "task-started":
Console.WriteLine("Task started.");
_taskStartedTcs.TrySetResult(true);
break;
case "task-finished":
Console.WriteLine("Task finished.");
_cancellationTokenSource.Cancel();
break;
case "task-failed":
Console.WriteLine("Task failed: " + response.RootElement.GetProperty("header").GetProperty("error_message").GetString());
_cancellationTokenSource.Cancel();
break;
default:
// result-generated can be handled here
break;
}
}
}
}
private static async Task<JsonDocument?> ReceiveMessageAsync() {
var buffer = new byte[1024 * 4];
var segment = new ArraySegment<byte>(buffer);
try {
WebSocketReceiveResult result = await _webSocket.ReceiveAsync(segment, _cancellationTokenSource.Token);
if (result.MessageType == WebSocketMessageType.Close) {
await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", _cancellationTokenSource.Token);
return null;
}
if (result.MessageType == WebSocketMessageType.Binary) {
// Handle binary data
Console.WriteLine("Receiving binary data...");
// Save binary data to a file
using (var fileStream = new FileStream(OutputFilePath, FileMode.Append)) {
fileStream.Write(buffer, 0, result.Count);
}
return null;
}
string message = Encoding.UTF8.GetString(buffer, 0, result.Count);
return JsonDocument.Parse(message);
} catch (OperationCanceledException) {
Console.WriteLine("Message reception was canceled.");
return null;
}
}
private static string GenerateTaskId() {
return Guid.NewGuid().ToString("N").Substring(0, 32);
}
private static string CreateCommand(string action, string taskId, string streaming, object payload) {
var command = new {
header = new {
action,
task_id = taskId,
streaming
},
payload
};
return JsonSerializer.Serialize(command);
}
}
```
PHP
O exemplo usa esta estrutura de diretórios:
```text
my-php-project/
├── composer.json
├── vendor/
└── index.php
```
Conteúdo de `composer.json` (Ajustar versões de dependência conforme necessário):
```json
{
"require": {
"react/event-loop": "^1.3",
"react/socket": "^1.11",
"react/stream": "^1.2",
"react/http": "^1.1",
"ratchet/pawl": "^0.4"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
```
Conteúdo de `index.php`:
```php
<!-- See SSML support requirements in the note above -->
<?php
require __DIR__ . '/vendor/autoload.php';
use Ratchet\Client\Connector;
use React\EventLoop\Loop;
use React\Socket\Connector as SocketConnector;
// If you have not configured an environment variable, replace the following line with: $api_key = "sk-xxx"
$api_key = getenv("DASHSCOPE_API_KEY");
$websocket_url = 'wss://maas.qwencloudapi.com/api-ws/v1/inference/'; // WebSocket server address
$output_file = 'output.mp3'; // Output file path
$loop = Loop::get();
if (file_exists($output_file)) {
// Clear the file content
file_put_contents($output_file, '');
}
// Create a custom connector
$socketConnector = new SocketConnector($loop, [
'tcp' => [
'bindto' => '0.0.0.0:0',
],
'tls' => [
'verify_peer' => false,
'verify_peer_name' => false,
],
]);
$connector = new Connector($loop, $socketConnector);
$headers = [
'Authorization' => 'bearer ' . $api_key,
'X-DashScope-DataInspection' => 'enable'
];
$connector($websocket_url, [], $headers)->then(function ($conn) use ($loop, $output_file) {
echo "Connected to WebSocket server\n";
// Generate task ID
$taskId = generateTaskId();
// Send run-task command
sendRunTaskMessage($conn, $taskId);
// Define the function to send the continue-task command
$sendContinueTask = function() use ($conn, $loop, $taskId) {
// Send the continue-task command. When using the SSML feature, this command can be sent only once.
$continueTaskMessage = json_encode([
"header" => [
"action" => "continue-task",
"task_id" => $taskId,
"streaming" => "duplex"
],
"payload" => [
"input" => [
// Special characters need to be escaped
"text" => "<speak rate=\"2\">My speaking rate is faster than a normal person's.</speak>"
]
]
]);
$conn->send($continueTaskMessage);
// Send the finish-task command
sendFinishTaskMessage($conn, $taskId);
};
// Flag to check if the task-started event is received
$taskStarted = false;
// Listen for messages
$conn->on('message', function($msg) use ($conn, $sendContinueTask, $loop, &$taskStarted, $taskId, $output_file) {
if ($msg->isBinary()) {
// Write binary data to the local file
file_put_contents($output_file, $msg->getPayload(), FILE_APPEND);
} else {
// Handle non-binary messages
$response = json_decode($msg, true);
if (isset($response['header']['event'])) {
handleEvent($conn, $response, $sendContinueTask, $loop, $taskId, $taskStarted);
} else {
echo "Unknown message format\n";
}
}
});
// Listen for connection close
$conn->on('close', function($code = null, $reason = null) {
echo "Connection closed\n";
if ($code !== null) {
echo "Close code: " . $code . "\n";
}
if ($reason !== null) {
echo "Close reason: " . $reason . "\n";
}
});
}, function ($e) {
echo "Could not connect: {$e->getMessage()}\n";
});
$loop->run();
/**
* Generate task ID
* @return string
*/
function generateTaskId(): string {
return bin2hex(random_bytes(16));
}
/**
* Send run-task command
* @param $conn
* @param $taskId
*/
function sendRunTaskMessage($conn, $taskId) {
$runTaskMessage = json_encode([
"header" => [
"action" => "run-task",
"task_id" => $taskId,
"streaming" => "duplex"
],
"payload" => [
"task_group" => "audio",
"task" => "tts",
"function" => "SpeechSynthesizer",
"model" => "cosyvoice-v3-flash",
"parameters" => [
"text_type" => "PlainText",
"voice" => "longanyang",
"format" => "mp3",
"sample_rate" => 22050,
"volume" => 50,
"rate" => 1,
"pitch" => 1,
// With enable_ssml: true, send continue-task only once
"enable_ssml" => true
],
"input" => (object) []
]
]);
echo "Preparing to send run-task command: " . $runTaskMessage . "\n";
$conn->send($runTaskMessage);
echo "run-task command sent\n";
}
/**
* Read audio file
* @param string $filePath
* @return bool|string
*/
function readAudioFile(string $filePath) {
$voiceData = file_get_contents($filePath);
if ($voiceData === false) {
echo "Failed to read audio file\n";
}
return $voiceData;
}
/**
* Split audio data
* @param string $data
* @param int $chunkSize
* @return array
*/
function splitAudioData(string $data, int $chunkSize): array {
return str_split($data, $chunkSize);
}
/**
* Send finish-task command
* @param $conn
* @param $taskId
*/
function sendFinishTaskMessage($conn, $taskId) {
$finishTaskMessage = json_encode([
"header" => [
"action" => "finish-task",
"task_id" => $taskId,
"streaming" => "duplex"
],
"payload" => [
"input" => (object) []
]
]);
echo "Preparing to send finish-task command: " . $finishTaskMessage . "\n";
$conn->send($finishTaskMessage);
echo "finish-task command sent\n";
}
/**
* Handle events
* @param $conn
* @param $response
* @param $sendContinueTask
* @param $loop
* @param $taskId
* @param $taskStarted
*/
function handleEvent($conn, $response, $sendContinueTask, $loop, $taskId, &$taskStarted) {
switch ($response['header']['event']) {
case 'task-started':
echo "Task started, sending continue-task command...\n";
$taskStarted = true;
// Send continue-task command
$sendContinueTask();
break;
case 'result-generated':
// Ignore result-generated event
break;
case 'task-finished':
echo "Task finished\n";
$conn->close();
break;
case 'task-failed':
echo "Task failed\n";
echo "Error code: " . $response['header']['error_code'] . "\n";
echo "Error message: " . $response['header']['error_message'] . "\n";
$conn->close();
break;
case 'error':
echo "Error: " . $response['payload']['message'] . "\n";
break;
default:
echo "Unknown event: " . $response['header']['event'] . "\n";
break;
}
// If the task is finished, close the connection
if ($response['header']['event'] == 'task-finished') {
// Wait for 1 second to ensure all data is transferred
$loop->addTimer(1, function() use ($conn) {
$conn->close();
echo "Client closes connection\n";
});
}
// If task-started event is not received, close the connection
if (!$taskStarted && in_array($response['header']['event'], ['task-failed', 'error'])) {
$conn->close();
}
}
```
Node.js
Instale as dependências necessárias:
```bash
npm install ws
npm install uuid
```
Código de exemplo:
```javascript
// See SSML support requirements in the note above
import fs from 'fs';
import WebSocket from 'ws';
import { v4 as uuid } from 'uuid'; // Used to generate UUIDs
// If you have not configured an environment variable, replace the following line with: const apiKey = "sk-xxx"
const apiKey = process.env.DASHSCOPE_API_KEY;
const url = 'wss://maas.qwencloudapi.com/api-ws/v1/inference/';
// Output file path
const outputFilePath = 'output.mp3';
// Clear the output file
fs.writeFileSync(outputFilePath, '');
// Create a WebSocket client
const ws = new WebSocket(url, {
headers: {
Authorization: `bearer ${apiKey}`,
'X-DashScope-DataInspection': 'enable'
}
});
let taskStarted = false;
let taskId = uuid();
ws.on('open', () => {
console.log('Connected to WebSocket server');
// Send the run-task command
const runTaskMessage = JSON.stringify({
header: {
action: 'run-task',
task_id: taskId,
streaming: 'duplex'
},
payload: {
task_group: 'audio',
task: 'tts',
function: 'SpeechSynthesizer',
model: 'cosyvoice-v3-flash',
parameters: {
text_type: 'PlainText',
voice: 'longanyang', // Voice
format: 'mp3', // Audio format
sample_rate: 22050, // Sample rate
volume: 50, // Volume
rate: 1, // Speech rate
pitch: 1, // Pitch
enable_ssml: true // Whether to enable the SSML feature. If enable_ssml is set to true, you can send the continue-task command only once. Otherwise, the error "Text request limit violated, expected 1." is reported.
},
input: {}
}
});
ws.send(runTaskMessage);
console.log('Sent run-task message');
});
const fileStream = fs.createWriteStream(outputFilePath, { flags: 'a' });
ws.on('message', (data, isBinary) => {
if (isBinary) {
// Write binary data to the file
fileStream.write(data);
} else {
const message = JSON.parse(data);
switch (message.header.event) {
case 'task-started':
taskStarted = true;
console.log('Task has started');
// Send continue-task command
sendContinueTasks(ws);
break;
case 'task-finished':
console.log('Task has finished');
ws.close();
fileStream.end(() => {
console.log('File stream has been closed');
});
break;
case 'task-failed':
console.error('Task failed: ', message.header.error_message);
ws.close();
fileStream.end(() => {
console.log('File stream has been closed');
});
break;
default:
// You can handle result-generated here
break;
}
}
});
function sendContinueTasks(ws) {
if (taskStarted) {
// Send the continue-task command. When using the SSML feature, this command can be sent only once.
const continueTaskMessage = JSON.stringify({
header: {
action: 'continue-task',
task_id: taskId,
streaming: 'duplex'
},
payload: {
input: {
// Special characters need to be escaped
text: '<speak rate="2">My speaking rate is faster than a normal person\'s.</speak>'
}
}
});
ws.send(continueTaskMessage);
// Send the finish-task command
const finishTaskMessage = JSON.stringify({
header: {
action: 'finish-task',
task_id: taskId,
streaming: 'duplex'
},
payload: {
input: {}
}
});
ws.send(finishTaskMessage);
}
}
ws.on('close', () => {
console.log('Disconnected from the WebSocket server');
});
```
Java (WebSocket)
Para Java, recomendamos usar o [Java SDK] (/api-reference/speech-synthesis/cosyvoice/java-sdkEm vez disso.
O exemplo seguinte de Java WebSocket requer essas dependências:
- `Java-WebSocket`
- `jackson-databind`
Use Maven ou Gradle para gerenciar dependências:
```xml pom.xml
<dependencies>
<!-- WebSocket Client -->
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.5.3</version>
</dependency>
<!-- JSON Processing -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
</dependencies>
```
```gradle build.gradle
// Omit other code
dependencies {
// WebSocket Client
implementation 'org.java-websocket:Java-WebSocket:1.5.3'
// JSON Processing
implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.0'
}
// Omit other code
```
Código Java:
```java
import com.fasterxml.jackson.databind.ObjectMapper;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.nio.ByteBuffer;
import java.util.*;
/**
* SSML feature notes:
* 1. When sending the run-task command, set the enable_ssml parameter to true to enable SSML support.
* 2. Send the text that contains SSML by using the continue-task command. You can send this command only once.
* 3. Only cloned voices of the qwen-audio-3.0-tts-flash, qwen-audio-3.0-tts-plus, cosyvoice-v3-flash, and cosyvoice-v3-plus models, as well as system voices marked as SSML-supported in the voice list, support the SSML feature (for example, the longanyang voice of the cosyvoice-v3-flash model).
*/
public class TTSWebSocketClient extends WebSocketClient {
private final String taskId = UUID.randomUUID().toString();
private final String outputFile = "output_" + System.currentTimeMillis() + ".mp3";
private boolean taskFinished = false;
public TTSWebSocketClient(URI serverUri, Map<String, String> headers) {
super(serverUri, headers);
}
@Override
public void onOpen(ServerHandshake serverHandshake) {
System.out.println("Connection successful");
// Send run-task command
// If enable_ssml is set to true, you can send the continue-task command only once.
// Otherwise, you will get the error "Text request limit violated, expected 1."
String runTaskCommand = "{ \"header\": { \"action\": \"run-task\", \"task_id\": \"" + taskId + "\", \"streaming\": \"duplex\" }, \"payload\": { \"task_group\": \"audio\", \"task\": \"tts\", \"function\": \"SpeechSynthesizer\", \"model\": \"cosyvoice-v3-flash\", \"parameters\": { \"text_type\": \"PlainText\", \"voice\": \"longanyang\", \"format\": \"mp3\", \"sample_rate\": 22050, \"volume\": 50, \"rate\": 1, \"pitch\": 1, \"enable_ssml\": true }, \"input\": {} }}";
send(runTaskCommand);
}
@Override
public void onMessage(String message) {
System.out.println("Received message from server: " + message);
try {
// Parse JSON message
Map<String, Object> messageMap = new ObjectMapper().readValue(message, Map.class);
if (messageMap.containsKey("header")) {
Map<String, Object> header = (Map<String, Object>) messageMap.get("header");
if (header.containsKey("event")) {
String event = (String) header.get("event");
if ("task-started".equals(event)) {
System.out.println("Received task-started event from server");
// Send the continue-task command. When using the SSML feature, this command can be sent only once.
// Special characters need to be escaped.
sendContinueTask("<speak rate=\\\"2\\\">My speaking rate is faster than a normal person's.</speak>");
// Send the finish-task command
sendFinishTask();
} else if ("task-finished".equals(event)) {
System.out.println("Received task-finished event from server");
taskFinished = true;
closeConnection();
} else if ("task-failed".equals(event)) {
System.out.println("Task failed: " + message);
closeConnection();
}
}
}
} catch (Exception e) {
System.err.println("An exception occurred: " + e.getMessage());
}
}
@Override
public void onMessage(ByteBuffer message) {
System.out.println("Size of received binary audio data: " + message.remaining());
try (FileOutputStream fos = new FileOutputStream(outputFile, true)) {
byte[] buffer = new byte[message.remaining()];
message.get(buffer);
fos.write(buffer);
System.out.println("Audio data has been written to the local file " + outputFile);
} catch (IOException e) {
System.err.println("Failed to write audio data to local file: " + e.getMessage());
}
}
@Override
public void onClose(int code, String reason, boolean remote) {
System.out.println("Connection closed: " + reason + " (" + code + ")");
}
@Override
public void onError(Exception ex) {
System.err.println("Error: " + ex.getMessage());
ex.printStackTrace();
}
private void sendContinueTask(String text) {
String command = "{ \"header\": { \"action\": \"continue-task\", \"task_id\": \"" + taskId + "\", \"streaming\": \"duplex\" }, \"payload\": { \"input\": { \"text\": \"" + text + "\" } }}";
send(command);
}
private void sendFinishTask() {
String command = "{ \"header\": { \"action\": \"finish-task\", \"task_id\": \"" + taskId + "\", \"streaming\": \"duplex\" }, \"payload\": { \"input\": {} }}";
send(command);
}
private void closeConnection() {
if (!isClosed()) {
close();
}
}
public static void main(String[] args) {
try {
// If you have not configured an environment variable, replace the following line with: String apiKey = "sk-xxx"
String apiKey = System.getenv("DASHSCOPE_API_KEY");
if (apiKey == null || apiKey.isEmpty()) {
System.err.println("Please set the DASHSCOPE_API_KEY environment variable");
return;
}
Map<String, String> headers = new HashMap<>();
headers.put("Authorization", "bearer " + apiKey);
TTSWebSocketClient client = new TTSWebSocketClient(new URI("wss://maas.qwencloudapi.com/api-ws/v1/inference/"), headers);
client.connect();
while (!client.isClosed() && !client.taskFinished) {
Thread.sleep(1000);
}
} catch (Exception e) {
System.err.println("Failed to connect to WebSocket service: " + e.getMessage());
e.printStackTrace();
}
}
}
```
Python (WebSocket)
Para Python, recomendamos usar o [Python SDK] (/api-reference/speech-synthesis/cosyvoice/python-sdkEm vez disso.
Instale dependências antes de executar o exemplo:
```bash
pip uninstall websocket-client
pip uninstall websocket
pip install websocket-client
```
Não nomeie seu arquivo Python `websocket.py`. Isso causa `AttributeError: module 'websocket' has no attribute 'WebSocketApp'`.
```python
# SSML feature notes:
# 1. When sending the run-task command, set the enable_ssml parameter to true to enable SSML support.
# 2. Send the text that contains SSML by using the continue-task command. You can send this command only once.
# 3. Only cloned voices of the qwen-audio-3.0-tts-flash, qwen-audio-3.0-tts-plus, cosyvoice-v3-flash, and cosyvoice-v3-plus models, as well as system voices marked as SSML-supported in the voice list, support the SSML feature (for example, the longanyang voice of the cosyvoice-v3-flash model).
import websocket
import json
import uuid
import os
import time
class TTSClient:
def __init__(self, api_key, uri):
"""
Initializes the TTSClient instance.
Parameters:
api_key (str): The API key for authentication.
uri (str): The WebSocket service address.
"""
self.api_key = api_key # Replace with your API key.
self.uri = uri # Replace with your WebSocket address.
self.task_id = str(uuid.uuid4()) # Generate a unique task ID.
self.output_file = f"output_{int(time.time())}.mp3" # Output audio file path.
self.ws = None # WebSocketApp instance.
self.task_started = False # Whether task-started is received.
self.task_finished = False # Whether task-finished/task-failed is received.
def on_open(self, ws):
"""
Callback function when the WebSocket connection is established.
Sends the run-task command to start the speech synthesis task.
"""
print("WebSocket connection established")
# Construct the run-task command.
run_task_cmd = {
"header": {
"action": "run-task",
"task_id": self.task_id,
"streaming": "duplex"
},
"payload": {
"task_group": "audio",
"task": "tts",
"function": "SpeechSynthesizer",
"model": "cosyvoice-v3-flash",
"parameters": {
"text_type": "PlainText",
"voice": "longanyang",
"format": "mp3",
"sample_rate": 22050,
"volume": 50,
"rate": 1,
"pitch": 1,
# With enable_ssml: true, send continue-task only once
"enable_ssml": True
},
"input": {}
}
}
# Send the run-task command.
ws.send(json.dumps(run_task_cmd))
print("run-task command sent")
def on_message(self, ws, message):
"""
Callback function when a message is received.
Handles text and binary messages separately.
"""
if isinstance(message, str):
# Process JSON text messages.
try:
msg_json = json.loads(message)
print(f"Received JSON message: {msg_json}")
if "header" in msg_json:
header = msg_json["header"]
if "event" in header:
event = header["event"]
if event == "task-started":
print("Task started")
self.task_started = True
# Send the continue-task command. When using the SSML feature, this command can be sent only once.
# Special characters need to be escaped.
self.send_continue_task("<speak rate=\"2\">My speaking rate is faster than a normal person's.</speak>")
# Send finish-task after continue-task is sent.
self.send_finish_task()
elif event == "task-finished":
print("Task finished")
self.task_finished = True
self.close(ws)
elif event == "task-failed":
error_msg = msg_json.get("error_message", "Unknown error")
print(f"Task failed: {error_msg}")
self.task_finished = True
self.close(ws)
except json.JSONDecodeError as e:
print(f"JSON parsing failed: {e}")
else:
# Process binary messages (audio data).
print(f"Received binary message, size: {len(message)} bytes")
with open(self.output_file, "ab") as f:
f.write(message)
print(f"Audio data has been written to the local file {self.output_file}")
def on_error(self, ws, error):
"""Callback on error."""
print(f"WebSocket error: {error}")
def on_close(self, ws, close_status_code, close_msg):
"""Callback on close."""
print(f"WebSocket closed: {close_msg} ({close_status_code})")
def send_continue_task(self, text):
"""Sends the continue-task command with the text to be synthesized."""
cmd = {
"header": {
"action": "continue-task",
"task_id": self.task_id,
"streaming": "duplex"
},
"payload": {
"input": {
"text": text
}
}
}
self.ws.send(json.dumps(cmd))
print(f"Sent continue-task command, text content: {text}")
def send_finish_task(self):
"""Sends the finish-task command to end the speech synthesis task."""
cmd = {
"header": {
"action": "finish-task",
"task_id": self.task_id,
"streaming": "duplex"
},
"payload": {
"input": {}
}
}
self.ws.send(json.dumps(cmd))
print("Sent finish-task command")
def close(self, ws):
"""Actively closes the connection."""
if ws and ws.sock and ws.sock.connected:
ws.close()
print("Connection actively closed")
def run(self):
"""Starts the WebSocket client."""
# Set request headers (authentication).
header = {
"Authorization": f"bearer {self.api_key}",
"X-DashScope-DataInspection": "enable"
}
# Create a WebSocketApp instance.
self.ws = websocket.WebSocketApp(
self.uri,
header=header,
on_open=self.on_open,
on_message=self.on_message,
on_error=self.on_error,
on_close=self.on_close
)
print("Listening for WebSocket messages...")
self.ws.run_forever() # Start the persistent connection listener.
# Example usage
if __name__ == "__main__":
# If you have not configured an environment variable, replace the following line with: API_KEY = "sk-xxx"
API_KEY = os.environ.get("DASHSCOPE_API_KEY")
SERVER_URI = "wss://maas.qwencloudapi.com/api-ws/v1/inference/"
client = TTSClient(API_KEY, SERVER_URI)
client.run()
```
Referência da etiqueta
CosyVoice SSML é baseado em [W3C SSML 1.0] (https://www.w3.org/TR/speech-synthesis/) mas suporta apenas um subconjunto de etiquetas.
Regras de sintaxe:
- Enrole todo o conteúdo SSML em
<speak></speak>Marcas. - Use múltiplos
<speak>Marcas consecutivas, mas não as aninham. - Personagens especiais de fuga XML:
"→",'→',&→&,<→<,>→>.
<speak>"Raiz tag"
Descrição
Enrole todo o conteúdo SSML em <speak></speak> Marcas.
Sintax
<speak>Text that requires SSML features</speak>
? Propriedades ?
Ver a tabela estruturada nos quadros de referência desta página ↓
FundoMúsicaVolume # #Cordas # # Não # volume de música de fundo.
*Exemplos *
Voz:
<speak voice="longcheng_v2">
I am a male voice.
</speak>
Taxa:
<speak rate="2">
My speech rate is faster than normal.
</speak>
- Não, não.
<speak pitch="0.5">
However, my pitch is lower than others.
</speak>
Volume:
<speak volume="80">
My volume is also very high.
</speak>
Efeito:
<speak effect="robot">
Do you like the robot WALL-E?
</speak>
Efeito com efeitoValor:
<speak effect="eq" effectValue="1 -20 1 1 1 1 20 1">
Do you like the robot WALL-E?
</speak>
<speak effect="lpfilter" effectValue="1200">
Do you like the robot WALL-E?
</speak>
<speak effect="hpfilter" effectValue="1200">
Do you like the robot WALL-E?
</speak>
Se o áudio não estiver em formato WAV, converta-o com ffmpeg:
ffmpeg -i input_audio -acodec pcm_s16le -ac 1 -ar 16000 output.wav
Música de fundo.
<speak bgm="http://nls.alicdn.com/bgm/2.wav" backgroundMusicVolume="30" rate="-500" volume="40">
<break time="2s"/>
The old trees on the shady cliff are shrouded in mist
<break time="700ms"/>
The sound of rain is still in the bamboo forest
<break time="700ms"/>
I know that cotton contributes to the country's plan
<break time="700ms"/>
The scenery of Mianzhou is always pitiable
<break time="2s"/>
</speak>
Você é legalmente responsável pelos direitos autorais do áudio carregado.
Propriedades combinadas:
<speak>
Text that requires SSML tags
</speak>
<speak rate="200" pitch="-100" volume="80">
So when put together, my voice sounds like this.
</speak>
<break>Pausa
Descrição
- Insira uma pausa. Defina a duração em segundos (s) ou milissegundos (ms).
Sintax
# Empty attribute
<break/>
# With the time attribute
<break time="string"/>
- Comportamento de quebra de etiquetas: *
- Sem atributos,
<break/>padrão para uma pausa de 1 segundo. - Aviso:
<break>As etiquetas são somadas, mas o total é limitado em 10 segundos.
Por exemplo, estas três etiquetas totalizam 15 segundos, mas apenas os primeiros 10 segundos fazem efeito:
<speak>
Please close your eyes and take a rest.<break time="5s"/><break time="5s"/><break time="5s"/>Okay, please open your eyes.
</speak>
? Propriedades ?
Ver a tabela estruturada nos quadros de referência desta página ↓
Exemplo
<speak>
Please close your eyes and take a rest.<break time="500ms"/>Okay, please open your eyes.
</speak>
<sub> Substituir texto
Descrição
Substituir texto exibido por uma pronúncia diferente.
Sintax
<sub alias="string"></sub>
? Propriedades ?
Ver a tabela estruturada nos quadros de referência desta página ↓
Exemplo
<speak>
<sub alias="network protocol">W3C</sub>
</speak>
<phoneme>- Anunciar
Descrição
Especifique pronúncia usando Pinyin (chinês) ou o alfabeto fonético CMU (inglês).
Sintax
<phoneme alphabet="string" ph="string">text</phoneme>
? Propriedades ?
Ver a tabela estruturada nos quadros de referência desta página ↓
Exemplo
<speak>
去<phoneme alphabet="py" ph="dian3 dang4 hang2">典当行</phoneme>把这个玩意<phoneme alphabet="py" ph="dang4 diao4">当掉</phoneme>
</speak>
<speak>
How to spell <phoneme alphabet="cmu" ph="S AY N">sin</phoneme>?
</speak>
<soundEvent>Introduza um efeito sonoro
Descrição
Insira um arquivo de som externo (tons prompt, sons ambientais) em uma fala sintetizada.
Sintax
<soundEvent src="URL"/>
? Propriedades ?
Ver a tabela estruturada nos quadros de referência desta página ↓
Se o áudio não estiver em formato WAV, converta-o com ffmpeg:
ffmpeg -i input_audio -acodec pcm_s16le -ac 1 -ar 16000 output.wav
Você é legalmente responsável pelos direitos autorais do áudio carregado.
Exemplo
<speak>
A horse was frightened<soundEvent src="http://nls.alicdn.com/sound-event/horse-neigh.wav"/>and people scattered to avoid it.
</speak>
<say-as>- Defina o formato de leitura.
Descrição
Especifique como o texto é lido (como números, datas, números de telefone, etc.).
Sintax
<say-as interpret-as="string">text</say-as>
? Propriedades ?
Ver a tabela estruturada nos quadros de referência desta página ↓
Cardeal.
Formatos suportados para cardinal:
- Formato * Exemplo * Produção inglesa * Descrição * | --------------------------------------------------------------------------------------------- | --------- | ---------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | Número de corda 145, 140, 5, alcance inteiro: até 13 dígitos, [-999999999999, 999999999]. Decimal: até 13 dígitos inteiros, até 10 dígitos decimais.
Número de cordas começando com zero # 0145 # Cento e quarenta e cinco
Sinal negativo + número de corda 145 menos 45
Fio de números de três dígitos separados por vírgulas # 60.000 # 60 mil
Sinal negativo + cadeia de números de três dígitos separados por vírgulas -208.000 -208 mil Número de corda + ponto decimal + zero Número de corda + ponto decimal + número de corda 12,34 ,12 ponto três quatro, ..Três dígitos de número de cadeia separados por vírgulas + ponto decimal + número de cadeia .. 1.000,1 .. mil ponto um .. Sinal negativo + corda de número + ponto decimal + corda de número Sinal negativo + cadeia de números de três dígitos separados por vírgulas + ponto decimal + corda de números Número de cadeias de números (separadas por vírgulas de três dígitos) + hífen + número de vírgulas de três dígitos 1-1.000 , um a mil Outras leituras padrão 012.34 12,3-4 1/2, metade 3/4 menos 3/4 5,1/6, 5 pontos 1 sobre 6 3 1/2 menos 3 e meio 1000,3^3 mil ponto três para o poder de três 309.1 3 vezes 10 ao poder de 9 pontos 1 23,10% 23,3 pontos um por cento
Exemplo
<speak>
<say-as interpret-as="cardinal">12345</say-as>
</speak>
<speak>
<say-as interpret-as="cardinal">10234</say-as>
</speak>
dígitos
Formatos suportados para digits:
- Formato * Exemplo * Produção inglesa * Descrição * | ----------------------------------------------------- | ------------- | ---------------------------------------------------- | ----------------------------------------------------- | Número de corda 12034 Um dois zero três quatro Sem limite de comprimento estrito, mas manter menos de 20 caracteres. Número string + espaço ou hífen + número string +... 1-23-456 7890 um, dois três, quatro cinco seis, sete oito nove zero
Exemplo
<speak>
<say-as interpret-as="digits">12345</say-as>
</speak>
<speak>
<say-as interpret-as="digits">10234</say-as>
</speak>
Telefone
Formatos suportados para telephone:
- Formato * Exemplo * Produção inglesa * Descrição * | -------------------------------------------------------------------------------------------------------------- | ------------- | -------------------------------------------------- | ----------------------------------------------------- | Número de cordas 12034 Um dois oh três quatro Sem limite de comprimento estrito, mas manter menos de 20 caracteres. Número string + espaço ou hífen + número string +... 1-23-456 7890 um, dois três, quatro cinco seis, sete oito nove oh oh Mais sinal + número de corda + espaço ou hífen + número de corda + 43-211-0567 mais quatro três, dois um, oh cinco seis sete Parêntesis esquerdo + número de corda + parêntesis direito + espaço + número de corda + espaço ou hífen + número de corda (21) 654-3210 (dois um) seis cinco quatro, três dois um oh oh
Exemplo
<speak>
<say-as interpret-as="telephone">12345</say-as>
</speak>
<speak>
<say-as interpret-as="telephone">10234</say-as>
</speak>
Nome
Exemplo
<speak>
Her former name is <say-as interpret-as="name">Zeng Xiaofan</say-as>
</speak>
Endereço
Não é suportado para texto inglês.
Exemplo
<speak>
<say-as interpret-as="address">Fulu International, Building 1, Unit 3, Room 304</say-as>
</speak>
ID
Para o texto em inglês, isso funciona da mesma forma que characters.
Exemplo
<speak>
<say-as interpret-as="id">myid_1998</say-as>
</speak>
personagens
Formatos suportados para characters:
- Formato * Exemplo * Produção inglesa * Descrição * | ------ | -------------- | -------------------------------------------------------------------- | ----------------------------------------------------------------------------- | Corda: *b+3$.c-0'=α α asterisco B mais três dólares C traço zero apóstrofo é igual a alfa . Suporta caracteres chineses, letras inglesas, dígitos 0-9, e símbolos comuns.
Exemplo
<speak>
<say-as interpret-as="characters">Greek letters αβ</say-as>
</speak>
<speak>
<say-as interpret-as="characters">*b+3.c$=α</say-as>
</speak>
pontuação
Para o texto em inglês, isso funciona da mesma forma que characters.
Exemplo
<speak>
<say-as interpret-as="punctuation"> -./:;</say-as>
</speak>
Data
Formatos suportados para date:
- Formato * Exemplo * Produção inglesa * Descrição * | ------------------------------------------------------------------------------------------------------- | ------------------ | ----------------------------------------------------- | ---------------------------------------------------------------------------------- | Quatro dígitos/dois dígitos ou quatro dígitos-dois dígitos 2000/01, dois mil, oh um, o ano vai. 1900-01 1900, oh 1 2001-02 Vinte oh um, oh dois 2019-20 Vinte dezenove, vinte 1998-99 19 noventa e oito, noventa e nove 1999-00 19 noventa e nove, oh oh oh Número de quatro dígitos começando com 1 ou 2 2000... dois mil... quatro dígitos de ano. 1900 1900 1905 19OH 5OH 19OH 19OH 5OH 19OH 19OH 19OH 19OH 19OH 2021 Vinte e vinte e um Dia da semana, dia da semana, dia da semana, dia da semana, dia da semana, dia da semana, dia da semana, segunda-feira do casamento, quarta-feira, dia da semana, personagens especiais em separadores de gama. Terça-feira a sexta-feira Sáb, domingo e sábado DD-DD MMM, YYYY ou DD~DD MMM, YYY ou DD&DD MMM, YYYY , 19-20 de janeiro de 2000 , 19 a 20 de janeiro de dois mil , DD = dois dígitos dia. MMM = abreviatura de mês ou nome completo. YYYY = 4 dígitos ano. 01/10 de julho de 2020, o primeiro a 10 de julho de 20 05/06 Abr, 2009 O quinto e o sexto de abril 2 mil nove MMM DD-DD ou MMM DD ou MMM DD&DD 01 de fevereiro - 03 de fevereiro o primeiro ao terceiro mês MMM = mês. DD = dia. 10-20 de agosto, 10 ao 20 11 de dezembro de 12 de dezembro de 11 de dezembro e 12 de dezembro de 12 de dezembro de 11 de dezembro de 12 de dezembro de 12 de dezembro de 11 de dezembro de 12 de dezembro de 12 de dezembro de 11 de dezembro de 12 de dezembro de 12 de dezembro de 12 de dezembro de 12 de dezembro de 11 de dezembro de 12 de dezembro de 12 de dezembro de 12 de dezembro de 12 de dezembro de 12 de dezembro de 12 de dezembro de 12 de dezembro de 12 de dezembro de 11 de dezembro de 12 de dezembro de 11 de dezembro de 12 de dezembro de 12 de dezembro de 12 de dezembro de 12 de dezembro de 12 de dezembro de 11 de dezembro de dezembro de dezembro de 12 de dezembro de dezembro de 12 de dezembro de dezembro de 12 de dezembro de dezembro de 12 de dezembro de dezembro de 12 de dezembro de 12 de dezembro de dezembro de 12 de dezembro de dezembro de 12 de dezembro de dezembro de 11 de dezembro de 12 de dezembro de dezembro de 12 de dezembro de dezembro de 12 de dezembro de 12 de dezembro de dezembro de 12 de dezembro de dezembro de 12 de dezembro de dezembro de dezembro de 12 de dezembro de dezembro de 12 de dezembro de dezembro de 12 de dezembro de 12 de dezembro de dezembro de dezembro de 12 de dezembro de 12 de dezembro de 12 de dezembro de dezembro de dezembro de dezembro de 11 de 11 de 12 de dezembro de dezembro de 12 de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de 12 de 12 de dezembro de dezembro de 12 de dezembro de dezembro de dezembro de 12 de 12 de 12 de dezembro de dezembro de dezembro de 12 de 12 de 12 de dezembro de 12 de dezembro de 12 de dezembro de dezembro de dezembro de dezembro de 12 de 12 de dezembro de dezembro de 12 de dezembro de dezembro de 12 de dezembro de dezembro de 12 de 12 de 12 de dezembro de dezembro de dezembro de 12 de 12 de dezembro de dezembro de 12 de 12 de 12 de dezembro de dezembro de dezembro de 12 de dezembro de dezembro de 12 de 12 de 11 de 11 de 12 de dezembro de dezembro de 12 de 12 de dezembro de dezembro de dezembro de dezembro de dezembro de 12 de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de 12 de dezembro de dezembro de dezembro de 12 de dezembro de dezembro de 12 de dezembro de dezembro de dezembro de dezembro de 12 de 12 de dezembro de dezembro de dezembro de 12 de 12 de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de 12 de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de 12 de 12 de 12 de 12 de 12 de 12 de 12 de 12 de dezembro de dezembro de dezembro de dezembro de 12 de 12 de 12 de 12 de 12 de 12 de dezembro de dezembro de dezembro de dezembro de 12 de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de 12 de 12 de dezembro de 12 de dezembro de dezembro de dezembro de 12 de dezembro de dezembro de 12 de 12 de dezembro de 12 de 12 de dezembro de dezembro de dezembro de dezembro de dezembro de dezembro de 12 de 12 de 12 de dezembro de 12 de 12 de dezembro de 12 de 12 de dezembro de dezembro de 12 de dezembro de dezembro de dezembro de 12 de 12 de dezembro de dezembro de 12 de 12 de 12 de dezembro de dezembro de dezembro de 12 de 12 de 12 de dezembro de dezembro de 12 de 12 de dezembro de dezembro de 12 de 12 de 12 de 12 de dezembro de 12 de 12 de 12 de 12 de 12 de 12 de 12 de dezembro de dezembro de 12 de 12 de dezembro de 12 de 12 de 12 de 12 de 12 de 12 de 12 de 12 de 12 de 12 de 12 de 12 de 12 de 12 de 12 de 12 de 12 de Jan-Jun Janeiro a junho MMM = mês Jul - Dec - Julho a dezembro September e outubro AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA90aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1990aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1990aaaaaaaaa 1990aa 1990a 1990aaaaa 1990aaaaaaaaaaaaaaaaaaa 1990a 1990aa 1990a 1990a 1990aa 1990aaa 1990a 1990aaaaaaa 1990aaaaaaaaa 1990aaaaaaaaa 1990a 1990a 1990a 1990a 1990aaaaaa 1990aa 1990aaaa 1990aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1990a 1990a 1990a 1990a 1990aaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1990aaaaaaa 1990aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1990aaaaaaaaa 1990aaaaaa 1990aaaaaaaaa 1990a 1990a deaaaaaaaaaa 1990aaaaaaaaaaaaaa 1990aaaaaaaaaaaa ,aaaa 1990aaaaaaaaaaaa de 1990aaaaaaaaaa , 1990aaaa , 1990a 1990a 1990a , 1990aaaaaaaaaaaaaaa aaaaa , 1990 1990aaaa , 1990aaaaaaa , 1990 1990 1990 1990 1990aaaa 2001-2021 2 mil 1 a 20 1 WWW DD MMM YYYY Sun 20 de novembro de 2011 Domingo, 20 de novembro, 23 de novembro, 11 de novembro, WWW = dia da semana (abreviatura ou cheia). DD = dia. MMM = mês. AAAA = ano. WWW DD MMM Sun 20 Nov Domingo, 20 de novembro WWW MMM DD YYYY Sun 20 de novembro de 2011 Domingo novembro 20 de novembro 11 de novembro WWW MMM DD Sun 20 de novembro Domingo, novembro, 20 de novembro WWW YYYY-MM-DD Sáb 2010-10-01 sábado outubro os primeiros vinte e dez Sáb 2010/10/01, sábado, outubro, os primeiros vinte e dez WWW MM/DD/YYYY Sun 11/20/2011 Domingo novembro 2021 ? MM/DD/YYYY? 11/20/2011? ? novembro, 202111? AAAA, 1998 Dezenove noventa e oito Outras leituras padrão 10 de março de 2001 O décimo de março 2 mil um 10 Mar, 10 de março Mar 2001 Marche dois mil um Sexta-feira, 10 de março de 2001, dia 10 de março, 2 mil e um 10 de Mar de 2001 Marche o décimo dois mil um 10 de Mar Mar Marche o décimo 2001/03/10 Marcha no décimo dois mil um 2001-03-10 Marchando o décimo dois mil um 2000s 2 mil ? 2010's ? 20 dezenas ? 1900 de 19h00 90 anos dezenove anos de
Exemplo
<speak>
<say-as interpret-as="date">1000-10-10</say-as>
</speak>
<speak>
<say-as interpret-as="date">10-01-2020</say-as>
</speak>
Tempo
Formatos suportados para time:
- Formato * Exemplo * Produção inglesa * Descrição * | --------------------- | ------------------ | -------------------------------- | ----------------------------------------------------------------------------- | HH:MM AM ou PM 09:00 9 A M HH = hora (1-2 dígitos). MM = minuto (2 dígitos). AM/PM = manhã ou tarde. 09:03:00 9 oh 3 P M 09:13 P.m. 913 P.m. 21h00, 20h00 HHMM 100 uma hora Ponto de tempo 8h00 - 05h30 8h00 às 17h00 07:05:10:15 7 a 10 15 A M 09:00-13:00 9 horas a trezecentos
Exemplo
<speak>
<say-as interpret-as="time">5:00am</say-as>
</speak>
<speak>
<say-as interpret-as="time">0500</say-as>
</speak>
Moeda
Formatos suportados para currency:
- Formato * Exemplo * Produção inglesa * Descrição * | -------------------------------------------------------------------------------------- | ------------ | ------------------------------------- | ---------------------------------------------------------------------------------- | Número + Identificador de moeda 1,00 RMB Um yuan Suporta números inteiros, decimais e milhares separados por vírgulas. 2,02 CNY, dois pontos zero, dois yuan Mil,23 CN, mil, dois, três yuan 1,01 SGD Um dólar de um single e um centavo 2,01 CAD, dois dólares canadenses e um centavo 3.1 HKD Três dólares de Hong Kong e dez centavos Mil,00 euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil, mil, mil euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil euros, mil, mil, mil euros, mil euros, mil euros, mil, mil, mil, mil euros, mil, mil, mil, mil euros, mil, mil, mil, mil, mil, mil, mil, mil euros, mil euros, mil, mil, mil euros, mil euros, mil, mil euros, mil euros, mil euros, mil, mil, mil euros, mil, mil, mil mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil euros, mil, mil mil mil, mil mil, mil mil mil, mil, mil mil, mil, mil, mil mil mil, mil, mil mil mil, mil, mil mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, mil, Identificador de moeda + Número$ 1.00 Um dólar americano suporta números inteiros, decimais e milhares separados por vírgulas. | | $0.01 (≈ R$ 0,050203*) Um centavo JPY 1,01 Um iene japonês e um sen 1 libra e 10 pence 2,01 €, dois euros e um centavo , $ 1.000,000 dólares americanos Número + Quantificador + Identificador de moeda ou Identificador de moeda + Número + Quantificador , 1,23 Tn RMB , um ponto dois três tri trilhões yuan , quantificadores: mil, milhões, bilhões, trilhões, Mil, mil, k, bn, bn, tn, tn , tn | | $1.2 (≈ R$ 6,02436*) Um ponto e dois mil dólares
Exemplo
<speak>
<say-as interpret-as="currency">13,000,000.00RMB</say-as>
</speak>
<speak>
<say-as interpret-as="currency">$1,000.01</say-as>
</speak>
Mede.
Formatos suportados para measure:
- Formato * Exemplo * Produção inglesa * Descrição * | ---------------------------- | ----------- | -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | Número + Unidade de medida 1,0 kg um quilo de peso Suporta inteiros, decimais e milhares separados por vírgulas. Suporta abreviações comuns de unidades. 1.234,01 km. Mil duzentos e trinta e quatro pontos zero um km. Unidade de medida mm2 mm2 mm2
Exemplo
<speak>
<say-as interpret-as="measure">100m12cm6mm</say-as>
</speak>
<speak>
<say-as interpret-as="measure">1,000.01kg</say-as>
</speak>
Pronuncias de símbolos
Pronunciações comuns de símbolos para <say-as>:
Ver a tabela estruturada nos quadros de referência desta página ↓
# Libra
Dollar Por cento
E #
? ' ' ? citação esquerda Parenteses esquerdas Parentes direito
- Asterisco *
# Mais # # Mais
? , ? vírgula ?
- Oh, Deus, Deus!
# Ponto #
Deslizando
? ? ? ? ? ? ? ? ? ? ? ponto e vírgula ? | < | less than | | = | equals | | > ? maior que ? Ponto de interrogação ♪ ♪ ♪ ♪ em ♪ ♪ ♪ ♪ Suporte esquerdo ♪ ? ? ? ? ? ? ? ? ? ? ? ?
# Suporte direito
# Caret # # Caret
Oh, eu não sei
# Recuar #
| \{ , , esquerda aparelho
Barra vertical
| \} Certo, certo, certo
♪ ♪ ♪ ♪ tilde ♪
Largura total e símbolos especiais:
Ver a tabela estruturada nos quadros de referência desta página ↓
- Em linha ? ? ? ? ? ? ? ? ? ? ? ponto e vírgula ? Ponto de interrogação
# Enumeração vírgula
# Elipse
Elipse ♪ ♪ ♪ ♪ esquerda guillemet ♪ ♪ ♪ ♪ ♪ certo guillemet ♪ ♪ ♪ ♪ ♪ Yuan ♪ ? ≥ ? maior ou igual a ? ? ≤ ? menor ou igual a ? Não é igual , aproximadamente igual
# Mais ou menos
? × ? vezes
# Eu não sei #
- Letra grega.
Ver a tabela estruturada nos quadros de referência desta página ↓
O Tau
♪ ♪ ♪ ♪ upsilon ♪ ? ? ? ? ? ? ? ? ? ? ? ? ♪ ♪ ♪ ♪ ♪ ♪ ♪ ♪ .. .. ? ? ? ? ômega ? ?
- Letra grega:
Ver a tabela estruturada nos quadros de referência desta página ↓
# Não é eta
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ♪ ♪ ♪ ♪ Iota ♪ ♪ ♪ ♪ ♪ kappa ♪ ? ? ? lambda ?
# # Eu não posso #
# Não
♪ ♪ ♪ ♪ ♪ Ksi ♪ Omicron
# Eu não sei #
♪ ♪ ♪ ♪ ♪ ♪ Rho ♪ σ σ Okayma ? ? ? ? tau ? ♪ ♪ ♪ upsilon ♪ ? ? ? ? ? ? ? ? ? ? ? ? χ χ χ chi . .. .. .. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
Unidades comuns de medida
Unidades comuns para <say-as>:
Ver a tabela estruturada nos quadros de referência desta página ↓
LaTeX para falar.
CosyVoice converte fórmulas matemáticas incorporadas em texto para fala natural para audiolivros, educação online, e outros conteúdos de áudio em matemática e física.
Esta característica só suporta chinês. Fórmulas podem não ser pronunciadas corretamente em outras línguas. Exemplos de pronúncia neste guia são traduções em inglês e não representam o desempenho real da síntese.
Limitações
- Apenas chinês: Outros idiomas não são suportados
- ** Limites de conteúdo:**
- Use apenas as etiquetas e símbolos em [marcas e símbolos suportados] (#supported-tags-and-symbols)
- Blocos de matemática de marcação (
``` Matemática... ```) não são suportados. - Include only formulas within separators - other content may cause inaccurate synthesis
- Compatible models:
cosyvoice-v3-flash,cosyvoice-v3-plus
Steps
Embrulhe as fórmulas em seu texto com separadores específicos, e então chame a API de síntese de fala.
<Steps> <Step title="Mark formulas with separators"> Enrole fórmulas com qualquer um desses separadores (todos produzem resultados idênticos):
- `$...$`
- `$$...$$`
- `\(...\)`
- `\[...\]`
Example:
``` Texto simples
Aqui está a fórmula quadrática: $x = \frac{-b\sqrt\sqrt{b^2-4ac} {2a} $. Calcule com cuidado.
```
</Step>
<Step title="Call the API to request speech synthesis">
Chame a API de síntese de fala com suas fórmulas marcadas. Em JSON ou cordas literais, a contra-ataque (\) is an escape character — write it as \\.
Example call (in Python):
```Python
# Código=utf-8
Importação de os
Importar o dashscope
Da Dashscope.audio.tts_v2 importa
# Defina sua chave de API (formato: sk-xxx). Se não for definido como Env Var, descomente a próxima linha:
# Dashscope. Api_key = "sk-xxx"
- Dashscope. - Api-key = Os.environ.
Dashscope. Base_websocket_api_url='wss://maas.qwencloudapi.com/api-ws/v1/inference'
# Modelo
Modelo = "cosyvoice-v3-flash"
# Voz (deve ser compatível com sua versão modelo)
# cosyvoice-v3-flash/plusLonganyang, etc.
Voz = "longanyang"
# Sintetizador instantâneo com modelo e voz
Sintetizador de voz
# Envie texto e obtenha áudio binário.
Audio = sintetizador.call ("Esta é a fórmula quadrática: $x =\\frac{-b\\pm\\sqrt{b^2-4ac}}}$. Calculem com cuidado.
# Primeiro pedido inclui tempo de configuração de conexão WebSocket
Primeiro pacote de atraso:
Sintético.
Sintizer.get_first_package_delay())
# Salve áudio em um arquivo local
com "output.mp3", "wb" como f:
F. Write (áudio)
```
Marcas e símbolos suportados
As etiquetas e símbolos atualmente suportados estão listados abaixo.
Matemática básica
Ver a tabela estruturada nos quadros de referência desta página ↓
# Root # # Root # \sqrt{9} = 3 | $\sqrt {9} = 3$ A raiz quadrada de nove é igual a três
# Root # # Root # \sqrt[3]{8} = 2 | $\sqrt[3]{8} = 2$ A raiz cúbica de oito é igual a dois
Percentagem 5\% | $5\%$ ? Cinco por cento ?
Valor absoluto ∣3∣=3 | $\ | 3\ | =3$ O valor absoluto de três é igual a três
♪ ♪ verte ♪ ♪ Valor absoluto ♪ 3\vert=3 | $\vert 3\vert =3$ O valor absoluto de três é igual a três
Logaritmo lg {10} | $\lg {10}$ ♪ ♪ log dez ♪
Logaritmo \log{5} | $\log{5}$ Diário cinco
Logaritmo natural \lnX | $ln {10}$ LN 10
Fatorial 5! $5!$ Cinco fatorials.
Parenteses (2+1) $(2+1)$ Dois mais um entre parênteses
| \{ \} ? Braces ? \{2+1\} | $\{2+1\}$ Abra o aparelho dois mais um aparelho próximo
Símbolos matemáticos especiais.
Ver a tabela estruturada nos quadros de referência desta página ↓
Gamma gama # $\gamma$ ? gama ?
Gamma gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama gama $\Gamma$ ? gama ?
Delta $\delta$ Delta
Delta Delta $\Delta$ Delta
Inquieto infinito (chinês) $\infty$ Infinito
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? $∞$ Infinito
Geometria
Ver a tabela estruturada nos quadros de referência desta página ↓
Condições
Ver a tabela estruturada nos quadros de referência desta página ↓
Unidades.
As unidades devem ser enroladas com \unit, \quantity, \mathit, \mathrm, ou \rm -Etiquetas (como \unit{cm}).
Ver a tabela estruturada nos quadros de referência desta página ↓
G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G 5\quantity{g} | $5\quantity{g}$ 5 gramas
Kg, quilograma 5\quantity{kg} | $5\quantity{kg}$ 5 kg.
T t t ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã 5\quantity{t} | $5\quantity{t}$ 5 toneladas
mm^2 , milímetros quadrados 5\quantity{mm^2} | $5\quantity{mm^2}$ 5 milímetros quadrados
# cm^2 # # centímetros quadrados # 5\quantity{cm^2} | $5\quantity{cm^2}$ 5 centímetros quadrados
Decimeter quadrado 5\quantity{dm^2} | $5\quantity{dm^2}$ 5 decimômetros quadrados
Ângulo de metros quadrados 5\quantity{m^2} | $5\quantity{m^2}$ 5 metros quadrados
quilômetro quadrado 5\quantity{km^2} | $5\quantity{km^2}$ 5 quilômetros quadrados
mm^3 mm cúbico 5\quantity{mm^3} | $5\quantity{mm^3}$ 5 milímetros cúbicos
Cemcm3cm cúbico 5\quantity{cm^3} | $5\quantity{cm^3}$ 5 centímetros cúbicos
Decimeter cúbico 5\quantity{dm^3} | $5\quantity{dm^3}$ 5 decimômetros cúbicos
ÂMBITO DE MÉXIO 5\quantity{m^3} | $5\quantity{m^3}$ 5 metros cúbicos
quilômetro cúbico 5\quantity{km^3} | $5\quantity{km^3}$ 5 quilômetros cúbicos
, ml, mililitro 5\quantity{ml} | $5\quantity{ml}$ 5 mililitros
É o segundo 5\quantity{s} | $5\quantity{s}$ 5 segundos
Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min Min 5\quantity{min} | $5\quantity{min}$ 5 minutos
Hora 5\quantity{h} | $5\quantity{h}$ 5 horas
? km/h ? quilômetros por hora ? 5\quantity{km/h} | $5\quantity{km/h}$ 5 quilômetros por hora
G/l, gramas por litro 5\quantity{g/l} | $5\quantity{g/l}$ 5 gramas por litro
FAQ
Por que a fórmula que eu inscrevi não é lida?
- Separadores:
$...$,$$...$$,\(...\), ou\[...\] - Complexidade de fórmula: Garanta que a fórmula use apenas tags e símbolos suportados
- ** Personagens de fuga:** Confirme contra-ataques (
\) são escapados como\\em pedidos de API
Como eu lido com a contra-ataque?\) no meu código?
A contra-ataque (\) é um personagem de fuga em cordas literais e JSON. Fuja como se \\. Exemplo: escreva \frac Como \\frac em Python, Java, JavaScript e idiomas similares.
Quadros de referência
Tabelas restauradas a partir da referência original; a ordem das colunas e os valores técnicos foram preservados.
Quadro 1
| Propriedade | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| Voz | Cordas | Não | Nome de voz. Sobrepõe ovoiceParâmetro API. Veja. Lista de voz. |
| Taxa | Cordas | Não | Taxa de fala. Sobrepõe ospeech_rateParâmetro API. Distância: 0,5 a 2. Predefinição: 1. Valores acima de 1 são mais rápidos, abaixo de 1 são mais lentos. |
| Arremesso | Cordas | Não | -Pitch. Sobrepõe opitch_rateParâmetro API. Distância: 0,5 a 2. Predefinição: 1. Valores acima de 1 são maiores, abaixo de 1 são menores. |
| volume | Cordas | Não | Volume. Sobrepõe ovolumeParâmetro API. Distância: 0 a 100. Predefinição: 50. |
| efeito | Cordas | Não | Efeito sonoro. Valores:robot,lolita(voz vivamente feminina),lowpass,echo,eq(Equalizador, avançado),lpfilter(filtro de passagem baixa, avançado),hpfilter(filtro de passagem alta, avançado). UseeffectValuepara personalizareq,lpfilter, ehpfilter. Só um efeito por tag. Os efeitos sonoros aumentam a latência. |
| EfeitoValue | Cordas | Não | Personaliza oeffect. Poreq Uma cadeia de 8 inteiros separados por espaço (20 a 20) para ganhar em["40 Hz", "100 Hz", "200 Hz", "400 Hz", "800 Hz", "1600 Hz", "4000 Hz", "12000 Hz"]. Exemplo:"1 1 1 1 1 1 1 1". PorlpfilterFreqüência inteira em (0, taxa de amostragem/2]. Exemplo:"800". PorhpfilterFreqüência inteira em (0, taxa de amostragem/2]. Exemplo:"1200". |
| bgm | Cordas | Não | URL de música de fundo. O arquivo deve estar na OSS com pelo menos permissão de leitura pública. Escapar de caracteres especiais XML na URL. Requisitos: taxa de amostragem de 16 kHz, mono, WAV, 16 bits. Se o áudio sintetizado é maior que a música, a música se loops. |
| A música Volume | Cordas | Não | Volume de música de fundo. |
Quadro 2
| Propriedade | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| Tempo | Cordas | Não | A duração da pausa, como"2s"or"50ms". Em segundos: 1 a 10. Em milissegundos: 50 a 10000. |
Quadro 3
| Propriedade | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| Alias | Cordas | Sim | O texto para ler em vez disso. |
Quadro 4
| Propriedade | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| alfabeto | Cordas | Sim | Tipo de pronúncia:"py"(Pinyin) ou"cmu"(Alfabeto fonético). Veja.O Dicionário de Proclamação da CMU. |
| ph | Cordas | Sim | Os símbolos fonéticos ou Pinyin. Separe Pinyin de cada personagem com um espaço. O número de sílabas deve corresponder ao número de caracteres. Cada sílaba tem um número de tom (1 a 5, onde 5 é neutro). |
Quadro 5
| Propriedade | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| Src. | Cordas | Sim | URL de áudio. O arquivo deve estar na OSS com pelo menos permissão de leitura pública. Escapar de caracteres especiais XML na URL. Requisitos: taxa de amostragem de 16 kHz, mono, WAV, 16 bits, máx. 2 MB. |
Quadro 6
| Propriedade | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| interpret-as | Cordas | Sim | Tipo texto. Valores:cardinal(número),digits(dígitos individuais),telephone(número de telefone),name,address,id(nome da conta/nickname),characters(caracter por personagem),punctuation,date,time,currency,measure(unidade de medida). |
Quadro 7
| Formato | Exemplo | Saída em inglês | Descrição |
|---|---|---|---|
| Número de sequência | 145 | Cento e quarenta e cinco. | Alcance inteiro: até 13 dígitos, [-999999999999], 999999999]. Decimal: até 13 dígitos inteiros, até 10 dígitos decimais. |
| Número de cordas começando com zero | 0145 | Cento e quarenta e cinco. | |
| Sinal negativo + número de corda | -145 | - Menos cento e quarenta e cinco. | |
| Fio de números de três dígitos separados por vírgulas. | 60,000 | 60 mil. | |
| Sinal negativo + três dígitos de número de corda separados por vírgulas | -208,000 | menos duzentos e oito mil. | |
| Número string + ponto decimal + zero | 12.00 | Doze. | |
| Número string + ponto decimal + número string | 12.34 | 12 ponto 3-4 | |
| string de número de três dígitos separados por vírgulas + ponto decimal + string de número | 1,000.1 | Mil ponto um. | |
| Sinal negativo + número de corda + ponto decimal + número de corda | -12.34 | - 12,3-4. | |
| Sinal negativo + string de número de três dígitos separados por vírgulas + ponto decimal + string de número | -1,000.1 | menos mil ponto um. | |
| Número de corda + hífen + (três dígitos vírgula-separado) número | 1-1,000 | de um a mil | |
| Outras leituras padrão | 012.34 | 12 ponto 3-4 | |
| 1/2 | uma metade | ||
| -3/4 | - Menos três quartos. | ||
| 5.1/6 | 5 pontos 1 sobre 6 | ||
| -3 1/2 | menos três e meio | ||
| 1,000.3^3 | Mil ponto três para o poder de três | ||
| 3e9.1 | Três vezes dez para o poder de nove ponto um. | ||
| 23.10% | 23 pontos 1 por cento. |
Quadro 8
| Formato | Exemplo | Saída em inglês | Descrição |
|---|---|---|---|
| Número de sequência | 12034 | Um, dois, zero, três, quatro. | Sem limite de comprimento restrito, mas mantenha menos de 20 caracteres. |
| Número string + espaço ou hífen + número string + ... | 1-23-456 7890 | Um, dois, três, quatro, cinco, seis, sete, oito, nove, zero. |
Quadro 9
| Formato | Exemplo | Saída em inglês | Descrição |
|---|---|---|---|
| Número de sequência | 12034 | Um dois oh três quatro | Sem limite de comprimento restrito, mas mantenha menos de 20 caracteres. |
| Número string + espaço ou hífen + número string + ... | 1-23-456 7890 | Um, dois, três, quatro, cinco, seis, sete, oito, nove, oh | |
| Mais sinal + número de corda + espaço ou hífen + número de corda | +43-211-0567 | mais quatro três, dois um um, oh cinco seis sete | |
| Parêntesis esquerdo + número de corda + parêntesis direito + espaço + número de corda + espaço ou hífen + número de corda | (21) 654-3210 | (dois um) seis cinco quatro, três dois um oh |
Quadro 10
| Formato | Exemplo | Saída em inglês | Descrição |
|---|---|---|---|
| string | *b+3$.c-0'=α | Asterisco B mais 3 dólares C traço zero apóstrofo é igual a alfa | Suporta caracteres chineses, letras inglesas, dígitos 0-9, e símbolos comuns. |
Quadro 11
| Formato | Exemplo | Saída em inglês | Descrição |
|---|---|---|---|
| Quatro dígitos/dois dígitos ou quatro dígitos-dois dígitos | 2000/01 | Dois mil, oh um | O ano se estende. |
| 1900-01 | 1900, oh um | ||
| 2001-02 | Vinte e um, oh dois | ||
| 2019-20 | Vinte e dezenove, vinte. | ||
| 1998-99 | 19, noventa e oito, noventa e nove | ||
| 1999-00 | 19, noventa e nove, oh oh | ||
| Número de quatro dígitos começando com 1 ou 2 | 2000 | Dois mil. | Ano de quatro dígitos. |
| 1900 | 19h00 | ||
| 1905 | Dezenove oh cinco | ||
| 2021 | Vinte e vinte e um | ||
| Dia da semana-Dia da semana ou Dia da semana-Dia da semana ou Dia da semana-Dia da semana | mon-wed | Segunda a quarta-feira | Escapar de caracteres especiais XML em separadores de alcance. |
| Você está bem? | Terça-feira a sexta-feira | ||
| SAT&SUN | Sábado e domingo | ||
| DD-DD MMM, AAAA ou DD~DD MMM, AAAA ou DD&DD MMM, AAAA | 19-20 de janeiro de 2000 | Dezenove a 20 de janeiro, dois mil. | DD = dia de dois dígitos. MMM = abreviatura de mês ou nome completo. YYYY = 4 dígitos ano. |
| 01 ~ 10 jul, 2020 | O primeiro ao décimo de julho, vinte e vinte. | ||
| 05&06 Abr, 2009 | O quinto e o sexto de abril dois mil nove | ||
| MMM DD-DD ou MMM DD~DD ou MMM DD&DD | 01 de fevereiro de 03 | Fevereiro, o primeiro ao terceiro. | MMM = mês. DD = dia. |
| 10-20 de agosto | 10 de agosto ao 20o | ||
| Dec 11&12 | 11 DE DEZEMBRO E 12 DE DEZEMBRO | ||
| MMM-MMM ou MMM~MMM ou MMM&MMM | Jan-Jun | Janeiro a junho | MMM = mês. |
| Jul-Dec | Julho a dezembro | ||
| Sep&oct | Setembro e outubro | ||
| YYYYYYY ou YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY | 1990 - 2000 | 19, noventa a dois mil. | YYYY = 4 dígitos ano começando com 1 ou 2. |
| 2001-2021 | Dois mil um a vinte e vinte e um | ||
| WWW DD MMM YYYY | Sun 20 Nov 2011 | Domingo, 20 de novembro, 23 de novembro. | WWW = dia da semana (abreviatura ou cheia). DD = dia. MMM = mês. AAAA = ano. |
| WWW DD MMM | Sun 20 Nov | Domingo, 20 de novembro | |
| WWW MMM DD YYYY | Sun Nov 20 2011 | Domingo, novembro, 20 e onze | |
| WWW MMM DD | Sun Nov 20 | Domingo, novembro, 20 | |
| WWW YYYY-MM-DD | Sáb 2010-10-01 | Sábado, outubro, os primeiros vinte e dez. | |
| WWW YYYY/MM/DD | Sáb 2010/10/01 | Sábado, outubro, os primeiros vinte e dez. | |
| WWW MM/DD/AAAA | Sun 11/20/2011 | Domingo, novembro, 20 e onze | |
| MM/DD/AAAA | 11/20/2011 | Novembro, 2021, 11 | |
| YYYY | 1998 | 19, noventa e oito. | |
| Outras leituras padrão | 10 de março de 2001 | O 10 de março, dois mil um. | |
| 10 Mar | O décimo de março | ||
| Mar 2001 | Marche dois mil um. | ||
| 10/Mar/2001 | Sexta-feira, 10 de março, 2 mil e um | ||
| 10 de março de 2001 | Marche o décimo dois mil um | ||
| 10 de Mar. | Marche o décimo | ||
| 2001/03/10 | Marche o décimo dois mil um | ||
| 2001-03-10 | Marche o décimo dois mil um | ||
| 2000s | Dois milhares. | ||
| 2010's | Vinte e dez. | ||
| 1900's | 19 centenas. | ||
| 1990s | 19 anos noventa. |
Quadro 12
| Formato | Exemplo | Saída em inglês | Descrição |
|---|---|---|---|
| HH:MM AM or PM | 09:00 AM | Nove A M | HH = hora (1-2 dígitos). MM = minuto (2 dígitos). AM/PM = manhã ou tarde. |
| 09:03 PM | 9 oh 3 P M | ||
| 09:13 p.m. | Nove e treze pm | ||
| HH:MM | 21:00 | Vinte e cem. | |
| HHMM | 100 | Uma hora. | |
| Ponto de tempo. | 8:00 am - 05:30 pm | 8 am a 5 pm | Formatos de alcance temporal. |
| 7:05~10:15 AM | 7 a 10, 5 a 10, 15 A M. | ||
| 09:00-13:00 | das nove às trezecentas. |
Quadro 13
| Formato | Exemplo | Saída em inglês | Descrição |
|---|---|---|---|
| Número + Identificador de moeda | 1,00 RMB | Um yuan | Suporta números inteiros, decimais e milhares separados por vírgulas. |
| 2.02 CNY | Dois pontos zero dois yuan | ||
| 1,000.23 CN¥ | Mil, dois, três yuan. | ||
| 1,01 SGD | Um dólar de um só dia e um centavo. | ||
| 2.01 CAD | Dois dólares canadenses e um centavo. | ||
| 3.1 HKD | Três dólares Hong Kong e dez centavos | ||
| 1.000,00 euros. | Mil euros. | ||
| Identificador de moeda + Número | US$ 1.00 | Um dólar americano. | Suporta números inteiros, decimais e milhares separados por vírgulas. |
| US$ 0.01 | Um centavo. | ||
| JPY 1,01 | Um iene japonês e um sen | ||
| £1.1 | 1 libra e 10 centavos. | ||
| €2.01 | Dois euros e um centavo. | ||
| US$ 1.000. | Mil dólares americanos. | ||
| Número + Quantificador + Identificador de moeda ou Identificador de moeda + Número + Quantificador | 1,23 Tn RMB | Um ponto dois, três trilhões de yuan. | Quantificadores: mil, milhões, bilhões, trilhões, Mil, mil, K, k, Bn, bn, Tn, tn. |
| US$ 1.2 K | Um ponto e dois mil dólares. |
Quadro 14
| Formato | Exemplo | Saída em inglês | Descrição |
|---|---|---|---|
| Número + Unidade de medida | 1.0 kg | Um quilo de quilograma. | Suporta números inteiros, decimais e milhares separados por vírgulas. Suporta abreviações comuns de unidades. |
| 1,234.01 km | Mil duzentos e trinta e quatro zero, um km. | ||
| Unidade de medida. | mm2 | milímetros quadrado |
Quadro 15
| Símbolo | Pronunciação em inglês |
|---|---|
| ! | ponto de exclamação |
| " | aspas duplas |
| # | libra |
| $ | Dólar |
| % | Por cento |
| & | e |
| ' | Citação esquerda |
| ( | Parêntesis esquerdo |
| ) | parêntesis direito. |
| * | asterisco |
| + | Mais |
| , | vírgula |
| - | traço |
| . | ponto |
| / | cortar |
| : | - Não, não. |
| ; | ponto e vírgula |
| < | Menos que |
| = | igual a |
| > | maior que o |
| ? | Ponto de interrogação |
| @ | at |
| [ | Suporte esquerdo |
| \ | Retroceder |
| ] | Suporte direito |
| ^ | caret |
| _ | sublinhando |
| ` | -Backtick. |
\{ |
aparelho esquerdo |
| \ | |
\} |
Certo, certo, certo. |
| ~ | Tilde |
Quadro 16
| Símbolo | Pronunciação em inglês |
|---|---|
| ! | ponto de exclamação |
| \u201c | esquerda duplo aspas |
| \u201d | direita duplo aspas |
| \u2018 | Citação esquerda |
| \u2019 | Citação certa |
| ( | Parêntesis esquerdo |
| ) | parêntesis direito. |
| , | vírgula |
| 。 | Parada total. |
| — | Em desl |
| : | - Não, não. |
| ; | ponto e vírgula |
| ? | Ponto de interrogação |
| 、 | Número vírgula |
| … | elipse |
| …… | elipse |
| 《 | esquerda guillemet |
| 》 | Certo, Guillemet. |
| ¥ | Yuan. |
| ≥ | maior ou igual a |
| ≤ | Menos ou igual a |
| ≠ | Não é igual. |
| ≈ | aproximadamente igual. |
| ± | mais ou menos |
| × | Tempos |
| π | pi |
Quadro 17
| Símbolo | Pronunciação em inglês |
|---|---|
| Α | Alfa. |
| Β | beta |
| Γ | gama |
| Δ | Delta |
| Ε | Épsilon |
| Ζ | Zeta. |
| Θ | Theta |
| Ι | Iota. |
| Κ | Kappa. |
| ∧ | Lambda. |
| Μ | mu |
| Ν | nu |
| Ξ | KSI |
| Ο | Omicron |
| ∏ | pi |
| Ρ | Rho |
| ∑ | Sigma |
| Τ | Tau. |
| Υ | upsilon |
| Φ | phi |
| Χ | Chi. |
| Ψ | Psi. |
| Ω | ômega |
Quadro 18
| Símbolo | Pronunciação em inglês |
|---|---|
| α | Alfa. |
| β | beta |
| γ | gama |
| δ | Delta |
| ε | Épsilon |
| ζ | Zeta. |
| η | ETA |
| θ | Theta |
| ι | Iota. |
| κ | Kappa. |
| λ | Lambda. |
| μ | mu |
| ν | nu |
| ξ | KSI |
| ο | Omicron |
| π | pi |
| ρ | Rho |
| σ | Sigma |
| τ | Tau. |
| υ | upsilon |
| φ | phi |
| χ | Chi. |
| ψ | Psi. |
| ω | ômega |
Quadro 19
| Categoria | Unidades. |
|---|---|
| Comprimento | nm (nanômetro), μm (micrometro), mm (milímetro), cm (centímetro), m (metro), km (quilômetro), ft (pé), em (polegada) |
| Área | cm2 (centímetro quadrado), m2 (metro quadrado), km2 (quilômetro quadrado), SqFt (pé quadrado) |
| Volume | cm3 (cmímetro cúbico), m3 (mímetro cúbico), km3 (quilômetro cúbico), ml (mililitro), L (litro), gal (galão) |
| Peso | μg (micrograma), mg (miligrama), g (grama), kg (kilograma) |
| Tempo | Mín. (minuto), segundo (segundo), ms (milissegundo) |
| Eletromagnetismo. | μA (microamp), mA (miliamp), Hz (hertz), kHz (kilohertz), MHz (megahertz), GHz (gigahertz), V (volt), kV (kilovolt), kWh (hora de kilowatt) |
| Som | dB (decibel) |
| Pressão atmosférica. | Pa (pascal), kPa (kilopascal), MPa (megapascal) |
| Outro | Também suporta unidades como Tsp (teaspoon), rpm (revoluções por minuto), KB (kilobyte), mmHg (milímetro de mercúrio), e muito mais. |
Quadro 20
| Marca ou símbolo | Função | Exemplo de conteúdo de fórmula | Exemplo de entrada de fórmula | Pronuncia |
|---|---|---|---|---|
| + | Adicionar | 2 + 3 = 5 | $2 + 3 = 5$ |
Dois mais três é igual a cinco. |
| - | Subtrair | 3 - 2 = 1 | $3 - 2 = 1$ |
Três menos dois é igual a um. |
| \pm | Mais ou menos, positivo ou negativo. | \pm 1 \pm 2 | $\pm 1\pm 2$ |
Mais ou menos um, mais ou menos dois |
| \ times | Multiplicar | 2 vezes 3 = 6 | $2 \times 3 = 6$ |
Duas vezes três é igual a seis. |
| × | Multiplicar | 2 × 3 = 6 | $$2 × 3 = 6$$ |
Duas vezes três é igual a seis. |
| * | Multiplicar | 2 * 3 = 6 | \(2 * 3 = 6\) |
Duas vezes três é igual a seis. |
| \div | Dividir | 6\div2=3 | \[6\div2=3\] |
Seis dividido por dois é igual a três |
| ÷ | Dividir | 6÷2=3 | $6÷2=3$ |
Seis dividido por dois é igual a três |
| / | Dividir | 6/2=3 | $6/2=3$ |
Seis dividido por dois é igual a três |
| = | Igual | 3+5=8 | $3+5=8$ |
Três mais cinco é igual a oito |
| < | Menos que isso. | 1< 2 | $1< 2$ |
Um é menos de dois. |
| ≤ | Menos ou igual a | 3≤5 | $3≤5$ |
Três é menor ou igual a cinco. |
| <= | Menos ou igual a | 3<=5 | $3<=5$ |
Três é menor ou igual a cinco. |
| \leq | Menos ou igual a | 3\leq5 | $3\leq 5$ |
Três é menor ou igual a cinco. |
| \le | Menos ou igual a | 3\le5 | $3\le 5$ |
Três é menor ou igual a cinco. |
| \leqq | Menos ou igual a | 3\leqq5 | $3\leqq 5$ |
Três é menor ou igual a cinco. |
| "Leqslant" | Menos ou igual a | 3\leqslant5 | $3\leqslant 5$ |
Três é menor ou igual a cinco. |
| > | Maior que | 2>1 | $2>1$ |
Dois é maior que um. |
| ≥ | Maior ou igual a | 5≥3 | $5≥3$ |
Cinco é maior ou igual a três. |
| >= | Maior ou igual a | 5>=3 | $5>=3$ |
Cinco é maior ou igual a três. |
| \geq | Maior ou igual a | 5\geq3 | $5\geq 3$ |
Cinco é maior ou igual a três. |
| \ge | Maior ou igual a | 5\ge3 | $5\ge 3$ |
Cinco é maior ou igual a três. |
| \geqq | Maior ou igual a | 5\geqq3 | $5\geqq 3$ |
Cinco é maior ou igual a três. |
| \geqslant | Maior ou igual a | 5\geqslant3 | $5\geqslant 3$ |
Cinco é maior ou igual a três. |
| \frac | Fracção | 2\frac3 |
$\frac {2}{3}$ |
Two-thirds |
| ^ | Poder | 2^1 |
$2^{1}$ |
Dois para a primeira potência. |
| \sqrt | Raiz. | \sqrt{9} = 3 |
$\sqrt {9} = 3$ |
A raiz quadrada de nove é igual a três. |
| \sqrt | Raiz. | \sqrt[3]{8} = 2 |
$\sqrt[3]{8} = 2$ |
A raiz cúbica de oito é igual a dois. |
| % | Percentagem | 5\% |
$5\%$ |
Cinco por cento. |
| \ | Valor absoluto | ∣3∣=3 |
`$\ | |
| \verter | Valor absoluto | 3\vert=3 |
$\vert 3\vert =3$ |
O valor absoluto de três é igual a três. |
| \lg | Logaritmo | lg {10} |
$\lg {10}$ |
log 10 |
| \log | Logaritmo | \log{5} |
$\log{5}$ |
Diário cinco. |
| \ln | Logaritmo natural | \lnX |
$ln {10}$ |
LN 10 |
| ! | Fatorial | 5! | $5!$ |
Cinco fatorials. |
| () | Parentes. | (2+1) | $(2+1)$ |
Dois mais um entre parênteses |
\{ \} |
- Segurem-se. | \{2+1\} |
$\{2+1\}$ |
Abra o aparelho dois mais um aparelho fechado |
Quadro 21
| Marca ou símbolo | Transformar | Exemplo de conteúdo de fórmula | Exemplo de entrada de fórmula | Pronuncia |
|---|---|---|---|---|
| "Alpha" | Alfa. | "Alpha" | $\alpha$ |
Alfa. |
| "Alpha." | Alfa. | "Alpha." | $\Alpha$ |
Alfa. |
| \beta | beta | \beta | $\beta$ |
beta |
| "Beta" | beta | "Beta" | $\Beta$ |
beta |
| \gama | gama | \gama | $\gamma$ |
gama |
| \Gamma | gama | \Gamma | $\Gamma$ |
gama |
| \delta | Delta | \delta | $\delta$ |
Delta |
| Delta | Delta | Delta | $\Delta$ |
Delta |
| "Infty" | infinito (Chinês) | "Infty" | $\infty$ |
Infinito |
| ∞ | Infty (Inglês) | ∞ | $∞$ |
Infinito |
Quadro 22
| Marca ou símbolo | Função | Exemplo de conteúdo de fórmula | Exemplo de entrada de fórmula | Pronuncia |
|---|---|---|---|---|
| \pi | Pi | \pi=3.14159 | $\pi =3.14159$ |
Pi é igual a 3.14159. |
| \sin | Função trigonométrica | \sin 30^\circ=\frac{1}{2} |
$\sin 30^\circ =\frac {1}{2}$ |
O seno de 30 graus é igual a 1/2 |
| \cos | Função trigonométrica | \cos 30^\circ=\frac{\sqrt{2}}{2} |
$\cos 30^\circ =\frac {\sqrt {2}}{2}$ |
O cosseno de 30 graus é igual à raiz quadrada de dois sobre dois. |
| \tan | Função trigonométrica | \tan 30^\circ=\frac{\sin 30^\circ}{\cos 30^\circ} |
$\tan 30^\circ =\frac {\sin 30^\circ}{\cos 30^\circ}$ |
A tangente de 30 graus é igual ao seno de 30 graus sobre o cosseno de 30 graus. |
| \csc | Função trigonométrica | \csc A | $\csc A$ |
Cossecante A |
| \sec | Função trigonométrica | \seg A | $\sec A$ |
Secante A |
| \cot | Função trigonométrica | \cot A | $\cot A$ |
Cotangente A |
| \angular | Ângulo | -Angle AB. | $\angle AB$ |
Ângulo AB |
| ∠ | Ângulo | ∠AB | $∠AB$ |
Ângulo AB |
| ^^circ | Grau | .AB = 30^\circ | $∠AB = 30^\circ$ |
Ângulo AB é igual a 30 graus. |
| \odot | Círculo | \odot | $\odot$ |
Círculo |
\overset\frown |
Arco | \overset\frown {BC} |
$\overset\frown {BC}$ |
Arco a.C. |
\rm{Rt} |
Ângulo direito | \because \rm{Rt}\triangle ABC |
$\because \rm{Rt}\triangle ABC$ |
Porque o triângulo ABC é um triângulo retângulo |
\mathrm{Rt} |
Ângulo direito | \therefore AB \perp BC |
$\therefore AB \perp BC$ |
Portanto, AB é perpendicular a BC. |
| Triângulo | Triângulo | Triângulo ABC | $\triangle ABC$ |
Triângulo ABC |
| △ | Triângulo | .ABC | $△ABC$ |
Triângulo ABC |
| \paralelograma | Paralelograma | \paralelograma ABCD | $\parallelogram ABCD$ |
Paralelograma ABCD |
| "Perp" | Perpendicular | AB \perp BC | $AB \perp BC$ |
AB é perpendicular a BC. |
| \bot | Perpendicular | AB \bot BC | $AB \bot BC$ |
AB é perpendicular a BC. |
| ⊥ | Perpendicular | AB ⊥ BC | $AB ⊥ BC$ |
AB é perpendicular a BC. |
| "Paralelo" | Paralelo | A\parallel B | $A\parallel B$ |
A é paralela a B. |
| "Equalparallel" | Paralelo e igual a | A igual paralelo B | $A\equalparallel B$ |
A é paralela e igual a B. |
| \cong | Congruente. | ? ABC? Cong? DEF | $△ABC\cong△DEF$ |
Triângulo ABC é congruente com o triângulo DEF. |
Quadro 23
| Marca ou símbolo | Função | Exemplo de conteúdo de fórmula | Exemplo de entrada de fórmula | Pronuncia |
|---|---|---|---|---|
| \implica | Implica | "Implica 1+1=2" | $\implies 1+1=2$ |
Isso implica que um mais um é igual a dois. |
| "Fix" | Equivalente a | P\iffq | $p\iffq$ |
P é equivalente a q |
| Porque... | Porque... | Porque a = b \ então b = a | $\because a = b \therefore b=a$ |
Porque a é igual a b, b é igual a a |
| Então, | Portanto | Porque a = b \ então b = a | $\because a = b \therefore b=a$ |
Porque a é igual a b, b é igual a a |
Quadro 24
| Marca ou símbolo | Pronuncia | Exemplo de conteúdo de fórmula | Exemplo de entrada de fórmula | Pronunciação de exemplo |
|---|---|---|---|---|
| mm | milímetro | 5\quantity{mm} |
$5\quantity{mm}$ |
5 milímetros. |
| cm | centímetros | 5\quantity{cm} |
$5\quantity{cm}$ |
5 centímetros. |
| dm | Decimeter | 5\quantity{dm} |
$5\quantity{dm}$ |
5 decimômetros. |
| m | Medidor | 5\quantity{m} |
$5\quantity{m}$ |
5 metros. |
| km | quilômetro | 5\quantity{km} |
$5\quantity{km}$ |
5 quilômetros. |
| g | Gram | 5\quantity{g} |
$5\quantity{g}$ |
5 gramas. |
| kg | quilograma | 5\quantity{kg} |
$5\quantity{kg}$ |
5 quilos. |
| t | Ton. | 5\quantity{t} |
$5\quantity{t}$ |
5 toneladas. |
| mm^2 | milímetros quadrado | 5\quantity{mm^2} |
$5\quantity{mm^2}$ |
5 milímetros quadrados. |
| cm^2 | Centímetro quadrado | 5\quantity{cm^2} |
$5\quantity{cm^2}$ |
5 centímetros quadrados. |
| dm^2 | Decimímetro quadrado | 5\quantity{dm^2} |
$5\quantity{dm^2}$ |
5 decimômetros quadrados. |
| m^2 | Medidor quadrado | 5\quantity{m^2} |
$5\quantity{m^2}$ |
5 metros quadrados. |
| km^2 | quilômetro quadrado | 5\quantity{km^2} |
$5\quantity{km^2}$ |
5 quilômetros quadrados |
| mm^3 | milímetros cúbicos | 5\quantity{mm^3} |
$5\quantity{mm^3}$ |
5 milímetros cúbicos. |
| cm^3 | Centimetro cúbico | 5\quantity{cm^3} |
$5\quantity{cm^3}$ |
5 centímetros cúbicos. |
| dm^3 | Decimeter cúbico | 5\quantity{dm^3} |
$5\quantity{dm^3}$ |
5 decimômetros cúbicos. |
| m^3 | Medidor cúbico | 5\quantity{m^3} |
$5\quantity{m^3}$ |
5 metros cúbicos. |
| km^3 | quilômetro cúbico | 5\quantity{km^3} |
$5\quantity{km^3}$ |
5 quilômetros cúbicos. |
| ml | mililitro | 5\quantity{ml} |
$5\quantity{ml}$ |
5 mililitros. |
| s | Segundo | 5\quantity{s} |
$5\quantity{s}$ |
5 segundos. |
| min | minuto | 5\quantity{min} |
$5\quantity{min}$ |
5 minutos. |
| h | Hora | 5\quantity{h} |
$5\quantity{h}$ |
5 horas. |
| km/h | quilômetros por hora. | 5\quantity{km/h} |
$5\quantity{km/h}$ |
5 km por hora. |
| g/l | gramas por litro | 5\quantity{g/l} |
$5\quantity{g/l}$ |
5 gramas por litro. |