You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
1.8 KiB
78 lines
1.8 KiB
/* Copyright (c) 2015 The Chromium OS Authors. All rights reserved.
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*
|
|
* This example plays a file. The filename is the only argument. The file is
|
|
* assumed to contain raw stereo 16-bit PCM data to be played at 48kHz.
|
|
* usage: cplay <filename>
|
|
*/
|
|
|
|
#include <cras_client.h>
|
|
#include <cras_helpers.h>
|
|
#include <sys/param.h>
|
|
#include <stdio.h>
|
|
#include <stdint.h>
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
struct cras_client *client;
|
|
cras_stream_id_t stream_id;
|
|
int rc = 0;
|
|
int fd;
|
|
const unsigned int num_channels = 2;
|
|
const unsigned int rate = 48000;
|
|
const unsigned int flags = 0;
|
|
uint8_t *buffer;
|
|
int nread;
|
|
|
|
if (argc < 2)
|
|
printf("Usage: %s filename\n", argv[0]);
|
|
|
|
fd = open(argv[1], O_RDONLY);
|
|
if (fd < 0) {
|
|
perror("failed to open file");
|
|
return -errno;
|
|
}
|
|
|
|
buffer = malloc(48000 * 4 * 5);
|
|
|
|
nread = read(fd, buffer, 48000 * 4 * 5);
|
|
if (nread <= 0) {
|
|
free(buffer);
|
|
close(fd);
|
|
return nread;
|
|
}
|
|
|
|
rc = cras_helper_create_connect(&client);
|
|
if (rc < 0) {
|
|
fprintf(stderr, "Couldn't create client.\n");
|
|
free(buffer);
|
|
close(fd);
|
|
return rc;
|
|
}
|
|
|
|
rc = cras_helper_play_buffer(client, buffer, nread / 4,
|
|
SND_PCM_FORMAT_S16_LE, rate, num_channels,
|
|
cras_client_get_first_dev_type_idx(
|
|
client,
|
|
CRAS_NODE_TYPE_INTERNAL_SPEAKER,
|
|
CRAS_STREAM_OUTPUT));
|
|
if (rc < 0) {
|
|
fprintf(stderr, "playing a buffer %d\n", rc);
|
|
goto destroy_exit;
|
|
}
|
|
|
|
/* At this point the stream has been added and audio callbacks will
|
|
* start to fire. This app can now go off and do other things, but this
|
|
* example just loops forever. */
|
|
while (1) {
|
|
sleep(1);
|
|
}
|
|
|
|
destroy_exit:
|
|
cras_client_destroy(client);
|
|
free(buffer);
|
|
close(fd);
|
|
return rc;
|
|
}
|