blob: 07e5d0f8966c8310632a2136081e502909c5cbe3 [file] [log] [blame]
/* 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;
}