/* 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 */ #include #include #include #include #include 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; }